2017-01-07 19 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を使用すると、あなたのケースではangleで呼び出されると思われる内部関数は呼び出されません。 $timeoutはそれを呼び出します。指令ではありません。それが未定義の理由です。あなたはそれがある修正するために何ができるか

:だから

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

、リンク関数内タイムアウトを動かします。もちろん、あなたがすでに持っている指令に$timeoutを注入する必要があります。

+0

これは完全に機能しました。ありがとうございます! –

+0

問題ありません。うれしかった! – Chanthu

関連する問題