2017-01-07 2 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, если вы хотите получить доступ к области. Угловой вызывает функцию связи и переходит в scope, element и attrs в таком порядке. Итак, когда используется тайм-аут, внутренняя функция, которая, по вашему мнению, будет вызвана угловым, не называется. $timeout вызывает это. Не директива. И вот почему это не определено.

Что вы могли бы сделать, чтобы исправить это:

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

Таким образом, перемещение таймаут внутри функции связи. И, конечно, вам нужно ввести $timeout в директиву, которую у вас уже есть.

+0

Это сработало отлично, спасибо! –

+0

Нет проблем. Рад, что сработало! – Chanthu

Смежные вопросы