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