替代自定义指令中的ngInit

时间:2015-11-03 13:11:43

标签: javascript angularjs

假设我有一个简单的指令:

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.varundefined,则我的指令不会将其绑定到隔离范围。

<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-initvm.var仍然具有约束力,即使它最初是undefined

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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

如果控制器不是问题。