Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度范围。$手表不工作_Javascript_Angularjs - Fatal编程技术网

Javascript 角度范围。$手表不工作

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

我有一个指令,将tabInfo绑定到tabdata,tabdata是一个数组

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) {
        }]
    };
});