【发布时间】:2013-03-21 05:16:52
【问题描述】:
我有一个表,用户可以选择根据某些列和这些列的某些值来过滤表中的行。跟踪此过滤器的对象结构如下所示:
$scope.activeFilterAttributes = [
{
"columnName": "city",
"values": ["LA", "OT", "NY"]
},
{
"columnName": "weather",
"values": ["humid", "sunny"]
}
];
所以数组中的对象包含“columnName”和“values”键。 “columnName”表示要为过滤器考虑的列,而“values”包含过滤器值。基本上,上面的数组将导致表中的行包含城市列包含“LA”、“OT”或“NY”作为值,而天气列包含“潮湿”或“晴天”作为值。不显示不包含这些值的其他行。
为了帮助更好地理解这个对象,如果用户希望只查看“城市”列中包含“LA”或“NY”的行,则结果数组将如下所示:
$scope.activeFilterAttributes = [
{
"columnName": "city",
"values": ["LA", "NY"]
},
{
"columnName": "weather",
"values": []
}
];
用户设置或删除这些过滤器。每当发生这种情况时,都会更新上述数组。 此更新正确发生并且我已经验证了它 - 这里没有问题。
问题在于 $watch()。我有以下代码:
$scope.$watch('activeFilterAttributes', function() {
//Code that should update the rows displayed in the table based on the filter
}}
虽然$scope.activeFilterAttributes 会随着用户更新 UI 中的过滤器而正确更新,但更新时不会触发 $watch。当应用程序第一次加载时触发,但以后的更新对此没有影响。
我创建了一个小提琴来证明这一点:http://jsfiddle.net/nCHQV/
在fiddle中,$scope.info代表表格的行,可以这么说;$scope.data代表过滤器。
单击按钮相当于更新过滤器(在小提琴的情况下 - 数据),从而更新表中显示的行(在小提琴的情况下 - 信息)。但是可以看出,单击按钮时信息不会更新。
对象数组发生变化时不应该触发$scope.$watch吗?
【问题讨论】:
标签: angularjs