2014-11-20 4 views
2

Я создал одну директиву и использовать область видимости переменных следующим образом:Директива AngularJS создает пустой массив в области.

<div data-create-instants-since-beginning data-daysnum="daysnum" data-tostore="tostore"> 

Я хочу, чтобы, когда tostore неопределен, чтобы установить его на пустой массив, но, к сожалению, это не работает.

.directive("createInstantsSinceBeginning", function() { 
     return { 
      scope: { 
       daysnum: "=", 
       tostore: "=" 
      }, 
      link: function ($scope, element) { 
       if (typeof $scope.tostore == 'undefined') { 
        $scope.$apply(function() { 
         $scope.tostore = []; 
        }); 
       } 
    // other code .. 

Как я могу решить проблему?

С уважением.

+0

Почему бы вам просто не инициализировать его в своем контроллере, поскольку вы используете двустороннюю привязку? – tiledcode

ответ

3

Try вынимая $scope.apply

.directive("createInstantsSinceBeginning", function() { 
    return { 
    scope: { 
     daysnum: "=", 
     tostore: "=" 
    }, 
    link: function(scope, element) { 
     if (typeof scope.tostore == 'undefined') { 
     scope.tostore = []; 
     } 
    } 
    }; 
}); 

См работает пример: http://plnkr.co/edit/OVsKcDebdNhxgCfdig4q?p=preview

+0

Человек ты лучший :). Спасите меня много исследований :). –

+1

Нет проблем. Вам нужно использовать '$ apply', когда вы делаете это вне контекста углового. Это не одно из тех времен. – Brocco

1

Просто сделать это в регуляторе директивы:

app.directive('createInstantsSinceBeginning',function(){ 
     return { 
      scope: { 
       daysnum: "=", 
       tostore: "=" 
      }, 
      controller: function($scope){ 
       if ( $scope.tostore === undefined) 
        $scope.tostore = []; 

      } 
}}); 
1

Самый короткий путь:

.directive("createInstantsSinceBeginning", function() { 
    return { 
     scope: { 
      daysnum: "=", 
      tostore: "=" 
     }, 
     link: function ($scope, element) { 
      $scope.tostore = $scope.tostore || []; 
     } 
// other code ..