javascript - 如何在 View 中对 Controller 中的更改使用react

标签 javascript angularjs user-interface model-view-controller separation-of-concerns

我知道这可能是一个非常幼稚的问题,但到目前为止我还无法在网络上找到明确的答案。

问题是我如何在 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 不应该:

  1. 直接从页面执行任何导航(在 TODO 2 行)
  2. 通过弹出通知等方式以任何方式与 UI 进行交互(TODO 3)。

根据我的理解,它应该引发相应的事件(?)/以某种方式通知任何关心登录操作结果的人。 那么 View 应该 导航

  1. 如果登录尝试成功,则返回主页
  2. 或者以其他方式显示弹出窗口

我错过了什么?使用 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/

相关文章:

javascript - 创建我的自定义插件并在本地注册

javascript - 如何在鼠标进入 div 时运行函数,反之亦然?

javascript - 监控 pouchdb 复制的状态

javascript - 将函数作为 AngularJS 中的选择值传递

c++ - 带有滚动条的 QGraphicsView 内不需要的边距

javascript 根本不执行

angularjs - 在指定时间后触发功能的 ionic 调度应用程序

javascript - Angular 服务被注入(inject)到 Controller 中,但它显示为一个空对象

JavaFX - 无法在 ChoiceBox 上调用 setOnAction()?

java - Android GUI 不显示