javascript - Ng-src 不会在 AngularJS View 中更新

标签 javascript dom angularjs

我在我的 Angular 应用程序中使用以下代码来显示图像:

<img ng-src="{{planet.image_url}}" class="planet-img"/>

我正在使用 $watch 在其他事件发生时更改 image_url 属性。例如:

$scope.$watch('planet', function(planet){
  if (planet.name == 'pluto') {
     planet.image_url = 'images/pluto.png';
  }
});

使用控制台日志,我看到模型属性正在按照我希望的方式更改,但这些更改并未反射(reflect)在 DOM 中。为什么 ng-src 不随着模型的变化自动更新?我是 Angular 的新手,所以也许这是我还没有掌握的概念。任何帮助将不胜感激。

最佳答案

您以错误的方式使用了 $scope.$watch。请参阅文档:

function(newValue, oldValue, scope): 
called with current and previous values as parameters.

因此函数传递了旧值和新值以及作用域。因此,如果您想更新数据,则需要引用范围。因为这无论如何都等于 $scope,所以您可以直接使用 $scope 而不必关心任何参数。这样做:

$scope.$watch('planet', function(){
  if ($scope.planet.name == 'pluto') {
    $scope.planet.image_url = 'images/pluto.png';
  }
});

或者,如果您想使用传递给函数的范围(如前所述,至少在这里不会有什么不同):

$scope.$watch('planet', function(newval, oldval, scope){
  if (newval.name == 'pluto') {
    scope.planet.image_url = 'images/pluto.png';
  }
});

关于javascript - Ng-src 不会在 AngularJS View 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19127011/

相关文章:

javascript - 跟踪 svg 路径(在离散步骤中获取 x、y 坐标)

javascript - Undefined 不是一个对象(评估 'this. state.input' )

angularjs - Angular 路由器的动态routeProvider参数

javascript - 从模态形式( Angular )中提取用户输入

javascript - 我一直试图用 javascript 创建动态排行榜

angularjs - Angular-ui-bootstrap 模式不传回结果

javascript - D3 强制布局 : How do I set the size of every node?

javascript - 当同位素/masonry 第一次加载时,它会一起皱巴巴的,如何修复?

javascript - 滚动时放大或缩小 HTML 元素

javascript - 测试 "not null"并在 JS 中相应地设置值的紧凑方法