【发布时间】:2016-02-19 13:51:22
【问题描述】:
最近我实现了一个指令,它使用了一个用 css 定制的复选框。选中复选框的值时,我需要从范围调用函数。我有一些与ng-click 合作的东西,但这不是我要寻找的。
我查看了ng-true-value,但它需要一个值,而不是我可以调用的函数。有没有办法解决这个问题,所以只有在复选框处于活动状态时才能调用该函数?这是指令定义:
{
restrict: 'E',
replace: true,
require: ['^ngModel'],
scope:{
isChecked: '=?',
secondFunction: '&'
},
template: function (elem, attr){
var a= '<label class="switch"'+attr.class+'><input type="checkbox" ng-class="{checked: isChecked}"><i></i></label>';
return a;
},
}
【问题讨论】:
-
你可以看看 $scope.watch $watch(watchExpression, listener, [objectEquality]);注册一个侦听器回调,以在 watchExpression 更改时执行。每次调用 $digest() 时都会调用 watchExpression,并且应该返回将被监视的值。 (watchExpression 在使用相同的输入多次执行时不应更改其值,因为它可能会被 $digest() 执行多次。
-
根据您的需要,您可以使用
ng-change或简单的$watch来控制您的逻辑。这可能发生在链接函数中(因为您可以访问范围),但我建议只使用一个控制器来代替指令。 -
非常感谢您的回复和编辑。正如你建议的那样,我使用了 $watch。还有一个问题是有什么办法可以做到这一点,我把任何功能放在范围内,所以指令可以是通用的吗?比如 ng-click。
标签: javascript angularjs angularjs-directive