【发布时间】:2015-11-21 22:05:31
【问题描述】:
我有一个自定义指令嵌套在父 div 中,其控制器将变量 value 设置为其范围,例如:
html
<div ng-controller="mainCtrl">
<p>{{data}}</p>
<myDirective oncolour="green" offcolour="red" data="data"></myDirective>
</div>
javascript
app.controller("mainCtrl", function($scope){
$scope.data= 1;
});
app.directive("myDirective", function() {
return {
restrict: 'E',
scope: {
oncolour: '@',
offcolour: '@',
data: '='
},
template: '<p>{{data}} is {{state}}</p>',
controller: function($scope){
console.log($scope.data); //undefined!
/* logic to set $scope.state depending on $scope.data */
};
};
});
我可以将 data 的值传递给指令,因为我可以看到模板中的 {{data}} 被正确解析。
但是,$scope.data 在指令的控制器中是未定义的。我需要根据这个变量应用一些逻辑,例如 if data==1, then state="on", else state="off",所以我可以应用 oncolour 和 offcolour 适当。
知道如何实现吗?
【问题讨论】:
-
我最好的选择是,当您直接传递数据时,变量会被隐藏(不知道它的内容)。您介意尝试将数据包装在对象文字中吗?然后在您的 HTML 中将其作为 data="wrapper.data"
-
哦,对不起,我当然可以看到数据的内容:-D 我的错。不过仍然坚持我的理论。另一个更昂贵的选择是在指令中添加对数据的监视。不过应该没有必要。
-
我会使用链接功能并访问 attr、elem 和 scope。通过scope.data访问数据
-
@marcel scope.data 在链接函数中也未定义
标签: javascript angularjs angularjs-directive angularjs-scope angularjs-controller