[英]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.