隔离范围值仅在存在时才被替换 - AngularJS 指令

Isolate scope value is replaced only if it exists - AngularJS Directive

模板:

<ui-print text="Print" panel="#paper1" 
          wait-for-data="adc.waitForData" 
          callfront-fn="adc.someFunction()"></ui-print>

<ui-print text="Print" panel="#paper2"></ui-print>

指令:

scope: {
    text: '@',
    panel: '@',
    callfrontFn: '&',
    waitForData: '='
},

link: function($scope) {
    var invokePrint = function(panel) {
        $window.print();
        $scope.waitForData = true;
    }

    $scope.printPanel = function(panel) {
        if (!$scope.waitForData) {
            invokePrint(panel);
        } else {
            $scope.callfrontFn();
        }
    };

    $scope.$watch('waitForData', function(n) {
        if (n === false) {
            invokePrint($scope.panel);
        }
    });
}

大家好,我想了解 isolate scope 在这里是如何工作的。如果您查看上面的代码,就会发现有 2 个元素指令。 1 个有 waitForData 而另一个没有。

在第二个 指令 中,当我 invokePrint() 并且有 $scope.waitForData=true 时,它不会触发 $watch。但在第一个 指令中 确实如此。

是否像 isolate scope 没有传递时,它的值不能在指令中被替换?我不明白为什么它会这样。

我只是想知道为什么手表在$scope.waitForData = true时没有在第二条指令中触发,而是在第一条指令中触发。

抱歉,出于安全原因,我无法 post 完整代码。但这是需要调试的代码

提前致谢!!!

waitForData: '='

表示您需要变量 waitForData。如果您不提供一个,那么它不会立即中断,但一旦您尝试设置该值,它就会中断。打开控制台,您将看到错误消息。 如果您希望该值是可选的,请附加一个问号,如下所示:

waitForData: '=?'

现在,如果您更改第二个指令中的 waitForData 变量,它将触发监视。您应该在所有可选变量上附加一个问号,否则一旦您尝试使用它们,指令就会中断。