2017-01-07 72 views
0

指令:AngularJS无法设置未定义的属性

app.directive('myDialog', ["$timeout", function($timeout) { 
    var fade = "fade"; 

    return { 
    template: '<div ng-controller="AccountCtrl" ng-cloak="">' + 
       '<div class="ui {{message.type}} message message-overwrite" ng-class="{'+ fade +': enabled} ">' + 
       '<div class="header">{{message.title}}</div>' + 
       '<p>{{message.content}}</p>' + 
       '</div>' + 
       '</div>', 
    link: $timeout(function($scope) { 
     $scope.enabled = true; 
     console.log("Test"); 
    }, 1000) 
    }; 
}]); 

当试图运行我的指导,我不断收到错误:

angular.js:13550 TypeError: Cannot set property 'enabled' of undefined 

但我不知道什么是正确的位置来定义'启用'是。

回答

1

如果您想要访问范围,则不能将指令的链接功能设置为$timeout。 Angular调用链接函数并按顺序传入scope,elementattrs。所以,当使用超时时,内部函数,在你的情况下认为将被角度调用不会被调用。 $timeout调用。不是指令。这就是为什么它是未定义的。

,你可以做些什么来解决这个问题是:

link: function($scope) { 
    $timeout(function(){ 
     $scope.enabled = true; 
     console.log("Test"); 
    }, 1000); 
} 

因此,移动超时链接功能里面。当然,您需要将$timeout注入到已有的指令中。

+0

这工作完美,谢谢! –

+0

没问题。很高兴工作! – Chanthu

相关问题