我知道这可能是一个非常幼稚的问题,但到目前为止我还无法在网络上找到明确的答案。
问题是我如何在 View 中对 Controller 中的更改使用react?
例如,我编写了一个登录 Controller ,它使用服务来执行请求,并且应该让用户进入或在登录尝试失败时通知他/她:
var loginFormControllerFunction = function($scope, $log, $location, authenticationService){
$scope.errorMessage = "";
$scope.submit = function() {
$scope.errorMessage = "";
$scope.loginSuccessful = false;
authenticationService.authenticate($scope.credentials.userName, $scope.credentials.password).then(
function(user) {
var token = user.token;
//TODO: Receive token. Keep this guy logged for sometime.
$scope.loginSuccessful = true;
//TODO 2: Navigate to the main page.
},
function(errorMessage) {
$scope.errorMessage = errorMessage;
//TODO 3: remove zis from here!!!!
//alert (errorMessage);
}
);
};
};
根据我对关注点分离和 mv* 模式概念的理解,现阶段 Controller 不应该:
- 直接从页面执行任何导航(在 TODO 2 行)
- 通过弹出通知等方式以任何方式与 UI 进行交互(TODO 3)。
根据我的理解,它应该引发相应的事件(?)/以某种方式通知任何关心登录操作结果的人。 那么 View 应该 导航
- 如果登录尝试成功,则返回主页
- 或者以其他方式显示弹出窗口
我错过了什么?使用 angularjs 实现此目的的最佳方法是什么?
谢谢。
最佳答案
对于第 1 部分,我将在authenticationService 中进行重定向。或者,如果您想从 View 中获得更多控制,请在调用提交方法时发送 url 作为参数。 View 本身无法(轻松)重定向您,这需要在服务或 Controller 中通过调用 $location.path(myPath) 来完成。
你是正确的, Controller 不应该像 Backbone 或类似应用程序那样直接与 View 交互(即使用 jQuery 修改页面)。 Angular Controller 应该做的是更新模型,并且 View 是否要对模型更改使用react取决于 View 。请记住,当模型更改时,Angular 会自动更新 View 中的内容,因此您可以使用 ng-show 或其他指令来显示消息。
因此,在您的 Controller 中,您可以像示例中一样更新 $scope.errorMessage,并且在您的 View 中,您可以这样做:
<form>
...
</form>
<span ng-show="errorMessage">Something went wrong: {{errorMessage}}</span>
现在,一旦 Controller 设置了错误消息, View 就会显示错误消息。当然,这里的跨度可以替换为任意对象,例如模式弹出窗口或其他对象。
关于javascript - 如何在 View 中对 Controller 中的更改使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27543145/