Javascript 角度视图未更新
我是Angular.js的新手,我想我错过了一些小但重要的东西 为了学习角度,我正在构建这个小面板,将视频源路由到目的地 我有一个源列表和一个目的地列表(每个目的地有2个插槽)。 这些将在稍后从API加载,但目前是在js中定义的 当我选择其中一个源时,“selectedSource”变量将与单击的源一起设置。 当我再次单击目标插槽时,将使用“selectedSource”对象设置该插槽的内容 控制台日志告诉我插槽的thumb url已更新,但我的html不显示更新的图像。我已经把“申请”弄得一团糟了,尽管我不认为这是一条路要走 请参见我的简化代码: HTML:Javascript 角度视图未更新,javascript,angularjs,Javascript,Angularjs,我是Angular.js的新手,我想我错过了一些小但重要的东西 为了学习角度,我正在构建这个小面板,将视频源路由到目的地 我有一个源列表和一个目的地列表(每个目的地有2个插槽)。 这些将在稍后从API加载,但目前是在js中定义的 当我选择其中一个源时,“selectedSource”变量将与单击的源一起设置。 当我再次单击目标插槽时,将使用“selectedSource”对象设置该插槽的内容 控制台日志告诉我插槽的thumb url已更新,但我的html不显示更新的图像。我已经把“申请”弄得一团
来源
目的地
(在您告诉我如何使用服务等之前,请记住:这是一个首次尝试的学习项目)问题是您试图更改
selectSlot()
函数的值参数slot
,而不是目标的slot数组本身。由于您可以从目的地列表中拥有一个或多个目的地插槽,因此最可能的解决方案是更改selectSlot()
,以接受插槽的当前目的地数组和要更改的插槽键
只需将此HTML代码从
<div ng-repeat="slot in destination.slots" ng-click="selectSlot(slot)">
查看此项以查看其实际操作
注意:您可以参考关于ng repeat的(键、值)synatx。这似乎是一个纯JavaScript问题 在
中选择slot()
:
此操作实际上没有按预期将$scope.selectedSource
分配给$scope.dest1.slot中的一个
您可能希望这样做:
slot.id = $scope.selectedSource.id;
slot.thumbUrl = $scope.selectedSource.thumbUrl;
那就行了
但也请注意,在您的情况下,您将$scope.destinations.dest1.slots
初始化为$scope.sources
的两个对象,这意味着更改$scope.dest1.slots
中的插槽也会导致更改$scope.sources
中相应的插槽。如果正如您所说,目的地“稍后将从API加载”,那么它就可以正常工作。与提供的答案类似。。。
<div ng-repeat="slot in destination.slots" ng-click="selectSlot(slot)">
<div ng-repeat="(key, slot) in destination.slots" ng-click="selectSlot(destination.slots, key)">
$scope.selectSlot = function(slots, key){
slots[key] = $scope.selectedSource;
//reset selected source
$scope.selectedSource = null;
}
slot = $scope.selectedSource;
slot.id = $scope.selectedSource.id;
slot.thumbUrl = $scope.selectedSource.thumbUrl;