簡體   English   中英

隔離范圍值僅在存在時才被替換-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);
        }
    });
}

大家好,我試圖了解隔離 范圍在這里的工作方式。 如果您看上面的代碼,有2個元素指令。 1個具有waitForData ,另一個沒有。

在第二個指令中 ,當我invokePrint()並有$scope.waitForData=true ,它不會觸發$watch 但是在第一個指令中卻可以。

就像沒有傳遞隔離范圍時,無法在指令中替換其值嗎? 我不明白為什么會這樣。

我只是想知道為什么當$scope.waitForData = true ,手表不是在第二條指令中觸發,而是在第一條指令中觸發。

抱歉,由於安全原因,我無法發布完整的代碼。 但這是需要調試的代碼。

提前致謝!!!

waitForData: '='

意味着您需要變量waitForData。 如果您不提供,則它不會立即斷裂,但是只要您嘗試設置該值,它就會斷裂。 打開控制台,您將看到錯誤消息。 如果您希望該值是可選的,則添加一個問號,如下所示:

waitForData: '=?'

現在,如果您在第二個指令中更改了waitForData變量,它將觸發監視。 您應該在所有可選變量后附加一個問號,否則在您嘗試使用它們時,指令會中斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM