2015-11-03 6 views
0

Предположит, у меня есть простая директива:Альтернатива для ngInit внутри пользовательской директивы

angular.module('app').directive('myDir', myDir); 

function myDir() { 

    var directive = { 
     bindToController: true, 
     controller: null, 
     controllerAs: 'vm', 
     template: '<button ng-click="vm.myDirVar = 1">', 
     scope: { 
      myDirVar: '=' 
     } 
    }; 

    return directive; 

} 

Если в следующем примере vm.var является undefined, моя директива не будет связывать его с изолированной областью.

<my-dir my-dir-var="vm.var"></my-dir> 

Так что для того, чтобы заставить его работать, я использую ng-init установить значение по умолчанию для vm.var, после того, что привязка к изолированному объема работ.

<my-dir my-dir-var="vm.var" ng-init="vm.var = var || 0"></my-dir> 

Вопрос заключается в том, как я могу улучшить свою директиву, так что я могу избавиться от ng-init в то время как vm.var будет по-прежнему является обязательным, даже если это undefined изначально.

ответ

1

Вы можете сделать что-то вроде:

var directive = { 
    bindToController: true, 
    controller: function(){ 
     this.myDirVar = this.myDirVar || 0; 
    }, 
    controllerAs: 'vm', 
    template: '<button ng-click="vm.myDirVar = 1">', 
    scope: { 
     myDirVar: '=' 
    } 
}; 

Если это не проблема с контроллером.

+0

Это действительно работает. По какой-то причине было чрезмерное решение: P – Websirnik

+0

Это бывает часто для меня! – teone

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