【发布时间】:2016-07-07 19:33:21
【问题描述】:
我在 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);
});
【问题讨论】:
-
Console.log 将立即执行,而不是等待任何其他代码,这是您未定义的来源,仅供参考。
-
没有。为什么会立即执行?它被放置在inside 回调函数中,当变量更改时应该调用该回调函数。就此而言,控制台日志会在大括号获取更改并打印出来查看的同时调用
-
您可以尝试将
watch包裹在$timeout中,它会在DOM 渲染后运行。它可能会有所帮助 -
同样将您的代码更改为
if(!angular.equals(newValue, oldValue)){ console.log(' changed to ' + newValue + ' from ' + oldValue);}并查看打印的内容。因为它只会在您的值发生变化时记录。 -
我确定这真的很简单,我认为人们提到手表不正确的原因是由于声明:
"currentURL" : '=vcCurrentUrl',因为我一直将其视为currentURL : '=vcCurrentUrl'。
标签: javascript angularjs