自定义指令隐藏但代码仍然运行

Haj*_*aji 1 angularjs angularjs-scope angular-directive

我有一个自定义指令,有时使用ng-hide隐藏:

<my-custom-directive ng-show="vm.showBox"
    value="vm.objects"
></my-custom-directive>         
Run Code Online (Sandbox Code Playgroud)

我的自定义指令代码的片段:

function myCustomDirective() {
    var directive = {
        controller: controller,
        controllerAs: 'vm',
        ///...
        scope: {
            value: '='
        }
    };
    return directive;

    function controller($scope) {
        var vm = this;
        ///...
        $scope.value.dates = $scope.value.dates || [];      
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:即使不应该加载/显示指令(因为它vm.showBox是假的),自定义指令的控制器代码$scope.value也会运行,在这种情况下它会失败,因为没有传递(它在那里未定义).

如果指令被隐藏,为什么指令的控制器代码仍会运行?我想假设如果使用该指令,则给出有效参数而不必检查是否$scope.value已定义.

小智 6

ng-show控制元素的可见性(css属性的更改display)但元素仍然存在于DOM中.删除/创建可以使用的元素ng-if而不是ng-show