簡體   English   中英

$ watch vs花括號 - $ watch不會捕捉范圍變量的變化

[英]$watch vs curly braces - $watch does not catch change of a variable on scope

我在AngularJS中遇到了問題。 我會嘗試簡化一些事情來解釋我遇到的問題。

我已經創建了一個應該處理圖像上傳的指令。 流程是這樣的。

如果圖像存在,服務器將返回靜態服務圖像的URL。 url和指令是從服務器異步加載的,因此無法確定哪個將首先加載。 我傳遞一個變量作為屬性

<my-directive vc-current-url="vm.data.profileURL"> </my-directive>

指令范圍

scope : { "currentURL" : '=vcCurrentUrl' }

因此,在我的模板中,我能夠{{scope.currentURL}}並且當它被加載時 - 它將顯示出來。 但是當加載該URL時我必須做更多的事情 - 將它傳遞給另一個函數(原因)。 很好我只會添加一個觀察者並等待它加載? 但不是。

scope.$watch(scope.currentURL, function (newValue, oldValue) {
    console.log(' changed to ' + newValue + ' from ' + oldValue);
}, true);

console.log被調用一次並打印出來

changed to undefined from undefined

我錯過了什么?

哦,我正在使用Angular 1.5。

編輯幾個答案是我沒有看到正確的變量。 下面的代碼不起作用,它會拋出

Error: currentURL is not defined

碼:

scope.$watch('currentURL', function (newValue, oldValue) {
    console.log(' changed to ' + newValue + ' from ' + oldValue);
});

首先,這是你觀察價值的方式

scope.$watch('currentURL'

其次,這就是你的范圍def看起來如何

scope : { "currentURL" : '=vcCurrentUrl' }

所以你對該視圖的指令應該是

<my-directive data-vc-current-url="vm.data.profileURL"> </my-directive>

試試這個:

scope.$watch('currentURL', function (newValue, oldValue) {
    console.log(' changed to ' + newValue + ' from ' + oldValue);
});

您沒有正確引用范圍變量。

所以我錯了。

Austn和Alon是正確的,但我沒有注意到他們在變量名稱周圍有撇號,我沒有它們。

在談話之后,我試圖將我的觀察者功能置於$ timeout。 在下一個循環中加載變量,我得到了一些奇怪的解析消息(url.com/variable.jpg不是有效的var名稱)。

所以在那一點上我意識到,如果你沒有將var name放在撇號中,它將使用var值(或未定義)。

那么為什么我得到那個控制台日志,我實際上做了什么

$watch(undefined, function() {...}); 

和觀察者通常在初始化時調用一次。 謝謝大家的幫助。

暫無
暫無

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

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