1

可以说我有以下视图代码:

<button ng-click="login()">Login</button>

如果我想将视图中的回调传递给控制器​​登录方法,我该怎么做?

我想做类似的事情:

<button ng-click="login( function() { 
                           $('#loginDialog').modal('hide'); 
                         } )">Log in</button>

但是 Angular 不会在 ng-click 中解析该代码,因此它不起作用。

我想要做的是将 DOM 操作从控制器中分离出来,并分成控制器可以调用的回调。因此,使控制器更具可测试性。

我确实知道有一个用于 Angular 的对话服务,但让我们假装用例不是对话,只是一些其他 DOM 改变的东西。

我是否必须求助于服务注入并在服务中注册所有回调并将该服务注入我的控制器?我想在这里将注入作为方法注入而不是构造函数注入。

那么有什么办法可以像我上面描述的那样做吗?

4

2 回答 2

0

我最终通过一项服务来做到这一点:

app.service('userEvents', function () {
    this.loggedIn = function () {
        $('#loginDialog').modal('hide');
    };
    this.registered = function () {
        $('#registerDialog').modal('hide');
    };
});

想了想,这与DOM或angular或angular方式无关。关闭登录表单是用户登录系统的副作用。

因此。我为用户创建了一个事件服务。因此控制器可以在用户登录或注册等时通知服务。

然后服务可以决定在发生此类事件时要做什么。例如发送电子邮件、关闭对话框或其他与模型本身没有任何关系的行为。

于 2013-07-05T09:04:09.950 回答
0

在 Angular 中,进行 DOM 操作的首选方式是使用指令……或者将视图逻辑与指令绑定,例如ng-showorng-hide

只需创建一个指令来包装您的模态窗口,或者使用 angular ui bootstrap 的 $dialog 服务.. 这是一个很好的服务。

于 2013-07-05T08:21:20.790 回答