AngularJS:绑定到数组元素的数据;不适用于批量更新
AngularJS: Data binding to array elements doesn't work with bulk update
所需的行为是,我希望根据后端返回的数据动态生成一些导航条目(一些<a>
)。因此,我将每个<a>
的herf和文本绑定到数组model
的元素的字段。一旦后端调用返回,我将返回数据data
分配给model
以更新html。model
和data
共享相同的结构,但这对我不起作用
阵列看起来像
$scope.links = {
'cancelLink': 'http://cancelLink',
'Steps': [{
'label': "Step1",
'link': "http://1"
}, {
'label': "Step2",
'link': "http://2"
}, {
'label': "Step3",
'link': "http://3",
'active': true
}, {
'label': "Review",
'link': "http://review"
}]
};
更新逻辑
$scope.loadLinks = function () {
$http({
method: 'GET',
url: '/links'
}).success(function(data) {
$scope.links = data;
});
};
HTML
<li><a class="text clickable" ng-href={{links.Steps[0].link}}>{{links.Steps[0].label}}</a></li>
<li><a class="text clickable" ng-href={{links.Steps[1].link}}>{{links.Steps[1].label}}</a></li>
...
上面的代码只是无声地失败了,控制台没有任何输出。我尝试将字段从date
分配到link
(links.Steps[0].link == data.Steps[0].link
),这很有效。所以我想知道是不是不支持这种批量更新?此外,我想知道今后该如何解决此类ng指令问题?
我将您的代码放入位于http://plnkr.co/edit/c5AOjyuLhBGqqugT4VU4?p=preview。
一个小的风格变化(尽管它不会以任何一种方式中断),您应该将ng href值用引号括起来:
ng-href={{links.Steps[0].link}}
应该是
ng-href="{{links.Steps[0].link}}"
否则,正如你在Plnkr中看到的,它工作得很好。我猜您的问题是$http调用没有像您期望的那样加载JSON,您的HTML无法访问控制器中的$scope,或者在load函数中设置的$scop与您正在访问的范围不同。
如果你发布一套更完整的代码,我们可以看到它在哪里崩溃。
第一次运行绑定时,它将对象链接绑定到模板。
所以,如果你对同一个对象进行更改,它就会被反映出来。但是,当您使用loadLinks函数获取链接时,您将创建一个新对象(具有相同名称)。尚未对绑定的原始对象进行任何更改。
这是正常的预期行为。
我所做的一种方法是清空链接数组,并用服务器中的新数据填充它。
简单的方法是
links.length = 0 //empties the array
//now append to links the data from server
Array.prototype.push.apply(links,data);
或者,您可以使用任何sugar库来合并实际修改原始数组的数组
- HTML5 Canvas toDataURL(“image/png”)适用于一些绘画,而有些则不然,不确定原因
- JavaScript不显示剩余字符,但适用于其他页面
- 我如何完善这个Javascript代码,使其只适用于来自图像的链接(而不是来自文本的链接)
- 为什么这只适用于身体部分而不是头部
- 为什么不't此正则表达式适用于重复出现的对
- document.getElementById 对内部 html 的调用适用于 $_POST 和 $_GET 变量,但不
- JavaScript 位置适用于本地主机而不是服务器
- Rally App SDK 2.0:Rallymultiobjectpicker,适用于不显示displayField的
- jQuery事件在Mozilla上不起作用,并且适用于其他浏览器
- Angular.js - 控制器不为索引执行,适用于其余模板
- D3 .on 更改适用于文本而不是图表
- Zillow 数据 - json_encode不起作用 - 适用于常规变量
- 弹出模式仅适用于表格中的第一个元素,第二次单击后不会再次打开
- Phonegap Android项目适用于模拟器,而不是实际的手机
- ajax jonp 不应该适用于 请求的上不存在“访问控制-允许源”标头
- AngularJS:ng-单击不起作用,适用于<按钮>
- Javascript不会在移动设备上加载.适用于桌面
- 为什么我的代码适用于高度:100px,而不是高度:100%
- 拖放区.js + Laravel-多文件上传不起作用(仅适用于一个文件)
- 哪些限制适用于不透明响应