【发布时间】:2015-10-28 15:18:46
【问题描述】:
在 AngularJS 中,我有以下场景,其中指令可以接受一个可选的布尔参数,默认情况下应该默认为 true,只要未指定。。 p>
示例:
<my-directive data-allow-something="false">
... this works as expected as no default value should be set in this case ...
</my-directive>
<my-directive>
... but in this case i'd like allowSomething to equal true ...
</my-directive>
我尝试了以下方法,但由于某种原因,true 值无法保持在 allowSomething 上。使它成为 '=?'可选的双向绑定不起作用,因为我传递的值应该是具体的真/假而不是字段引用。
angular.module('myApp').directive('myDirective') {
...
controller: function($scope){
if (!$scope.allowSomething)
$scope.allowSomething = true;
},
....
scope: function(){
allowSomething: '@'
}
...
}
我确信应该有一个简单的方法来实现这一点,那么我错过了什么?
以下票证给出的解决方案:AngularJS directive with default options 不足以满足我的需要,因为 $compile 函数会阻止链接函数工作。另外,传入的布尔值不是引用类型,我不能给它一个双向绑定。
【问题讨论】:
-
这可能是因为控制器在将隔离范围绑定到指令元素之前被实例化。因此,您设置的值将被从绑定中为指令创建的新范围覆盖。尝试在控制器的 $timeout 中设置默认值,或者尝试在链接函数中进行设置,或者调用指令控制器函数来设置链接函数的值。另请注意:您将 allowSomething 作为文本绑定,并且您将布尔值设置为默认值,您在属性中设置的内容将作为文本“false”到达?
-
试图把它放在链接函数中,但没有成功。我也试图避免 $timeout 方法。我认为应该有一种更清洁的方法来做到这一点。
标签: angularjs angularjs-directive angularjs-scope