AngularJS无法设置未定义的属性

时间:2017-01-07 01:48:25

标签: 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

但我不确定适当的地方定义&#39;启用&#39;是

1 个答案:

答案 0 :(得分:1)

如果要访问范围,则无法将指令的链接功能设置为total+=score 。 Angular调用链接函数并按顺序传入$timeoutscopeelement。因此,当使用超时时,内部函数(在您的情况下认为将由angular调用)不会被调用。 attrs称之为。不是指令。这就是它未定义的原因。

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

$timeout

因此,在链接函数内移动超时。当然,您需要将link: function($scope) { $timeout(function(){ $scope.enabled = true; console.log("Test"); }, 1000); } 注入到您已有的指令中。