Javascript 角度范围。$手表不工作
我有一个指令,将tabInfo绑定到tabdata,tabdata是一个数组Javascript 角度范围。$手表不工作,javascript,angularjs,Javascript,Angularjs,我有一个指令,将tabInfo绑定到tabdata,tabdata是一个数组 angular.module('widgets') .directive('tabs', function() { return { restrict: 'E', require: 'info', transclude: true, scope: {}, controllerAs: 'tabs', bindToC
angular.module('widgets')
.directive('tabs', function() {
return {
restrict: 'E',
require: 'info',
transclude: true,
scope: {},
controllerAs: 'tabs',
bindToController: {
tabInfo: '=tabdata'
},
templateUrl: 'Template.html',
link: function(scope, element, attrs, tabs) {
scope.$watch('tabs.tabInfo', function() {
tabs.populateDataProvider();
}, true);
},
controller: ['$filter', '$state', function($filter, $state) {
}]
};
});
我需要在tabInfo上查看任何更改并填充一些数据。然而,我的手表根本没人叫。我引用tabs.tabInfo的方式是否有问题 更好的解决方案是将ng if与指令一起使用,以确保只有在有数据要填充时才呈现指令。这样就避免了在指令中有一个观察者的需要 所以你可以用
<tabs ng-if="$ctrl.tableData.length" tab-info="$ctrl.tableData"></tabs>
编辑:
您的代码也有一个更正。应该是,
angular.module('widgets')
.directive('tabs', function() {
return {
restrict: 'E',
require: 'info',
transclude: true,
bindToController: true,
controllerAs: 'tabs',
scope: {
tabInfo: '=tabdata'
},
templateUrl: 'Template.html',
link: function(scope, element, attrs, tabs) {
scope.$watch('tabs.tabInfo', function() {
tabs.populateDataProvider();
}, true);
},
controller: ['$filter', '$state', function($filter, $state) {
}]
};
});
您需要在控制器中添加var tabs=此我需要在何处添加var tabs=此?它会在链接函数中吗?@looneytunes是的,在链接函数中我添加了这个,仍然不起作用,链接:functionscope,element,attrs,tabs{var tabs=this;scope.$watch'tabs.tabInfo',函数{tabs.populateDataProvider;},true;},还有一个修正,另外,我在评论中建议的是一个更好的选项,它应该在控制器中,而不是链接函数控制器:['$filter','$state',function$filter,$state{var tabs=this}]
angular.module('widgets')
.directive('tabs', function() {
return {
restrict: 'E',
require: 'info',
transclude: true,
bindToController: true,
controllerAs: 'tabs',
scope: {
tabInfo: '=tabdata'
},
templateUrl: 'Template.html',
link: function(scope, element, attrs, tabs) {
scope.$watch('tabs.tabInfo', function() {
tabs.populateDataProvider();
}, true);
},
controller: ['$filter', '$state', function($filter, $state) {
}]
};
});