AngularJS - 从视图传递回调?

时间:2013-07-05 08:17:08

标签: jquery dom angularjs

假设我有以下视图代码:

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

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

我想做类似的事情:

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

但angular不会在ng-click中解析该代码,因此无效。

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

我知道有一个针对角度的对话服务但是假设用例不是对话框,只是其他一些DOM改变的东西。

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

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

2 个答案:

答案 0 :(得分:0)

在角度方面,执行DOM操作的首选方法是使用指令 ...或将视图逻辑绑定到ng-showng-hide

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

答案 1 :(得分:0)

我最终用服务做到了:

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

在考虑这个之后,它与DOM或角度或角度方式无关。 关闭登录表单是用户登录系统的副作用。

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

然后服务可以决定在发生此类事件时该怎么做。 例如发送电子邮件,关闭对话框或其他与模型本身无关的行为。