0

模板隔離範圍值將被替換,只有當它存在 - AngularJS指令

<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,而是在第一條指令中觸發。

對不起,由於安全原因,我無法發佈整個代碼。但是這是需要調試的代碼。

在此先感謝!

+0

正如你可以在你的第二個指令模板中看到的'callfrontFn:'&''和'waitForData:'=''在你的隔離範圍內。所以它不會工作。 –

+0

,所以這兩個範圍都指向模板的相應屬性。我認爲你需要詳細地通過'指令'。這會幫助你更好地理解。 –

回答

0
waitForData: '=' 

表示您需要變量waitForData。如果你不提供一個,那麼它不會馬上破碎,但只要你嘗試設置值就會中斷。打開你的控制檯,你會看到錯誤信息。 如果你希望值是可選然後附加一個問號,像這樣:

waitForData: '=?' 

現在,如果你改變了waitForData變量在第二個指令會觸發手錶。您應該爲所有可選變量附加問號,否則只要嘗試使用它們,teh指令就會中斷。