我正在开发一个与"Widget布局“一起工作的应用程序。
用户获得一个页面,它是一个具有不同小部件的仪表板,可以与之交互,如表、图形等。
我正在使用添加一个全局“过滤器”,目的是让所有小部件共享过滤器,并由所有小部件进行更新。
我的过滤器列表使用<md-chips>,只读和md可移动设置为True.因此,过滤器只能通过与小部件交互来删除或添加(因此只能以编程方式添加)。
此“模块”的特性之一是在单击图形元素时在字段中添加新筛选器。
示例:
以下是我的筛选器列表,然后单击Graph元素

现在我点击过滤器控制器的一个子控制器中的一个图形元素,它将$emit一个事件告诉全局控制器:,“我想更新过滤器!下面是添加”“的过滤器
过滤器控制器将得到该事件,相应地更新 his过滤器($scope.tags是过滤器列表和<md-chips>中使用的模型)
// CHIPS
$scope.tags = [];
$scope.readOnly = true;
$scope.removable = true;
// FILTER LISTENER
$scope.$on('filterChildChanged', function (event, filter) {
$scope.tags.push(filter);
console.log($scope.tags);
console.log("Parent event fired !");
});此时,我希望<md-chips>元素能够刷新,因为$scope.tags刚刚获得了一个新的过滤器:
<md-chips
ng-model="tags"
readonly="readOnly"
md-removable="removable"
id="filters">
<md-chip-template>{{$chip.value}}</md-chip-template>
</md-chips>但实际上,什么都没发生!奇怪的是,当我点击一个现有的芯片(我有一个“测试”芯片)时,它会刷新!
测试:所以当我在呈现之前将测试芯片推到数组上时:
$scope.tags.push({field: "testField", value: "test"});

点击一堆图形元素,$scope.tags就被完美地更新了,但是在我选择芯片"test“之前,视觉保持不变,然后所有的<md-chips>看起来就像它触发了一些刷新功能一样。

关于为什么<md-chips>元素没有刷新为$scope.tags (其模型)被更新的,但是当选择芯片时被更新的任何提示?
每次我向md-on-select添加一个新的过滤器时,我都试图触发$scope.tags来强制这种行为发生,但是到目前为止,我没有得到任何运气!
谢谢你的阅读!
注意:,我使用的是最新版本的棱角材料(主版),请参阅文档这里:从GitHub存储库构建的https://material.angularjs.org/HEAD/。
编辑:问题来自$$hashKey没有被添加到对象中,它们只有在我单击现有标记时才会添加,当我添加新的筛选器时,我需要找到一种方法来添加$$hashKey属性。
发布于 2016-06-28 11:31:32
当我为我的$$hashKey ($scope.tags)过滤器模型添加了一个新的过滤器时,这个问题来自于缺乏。
所以我只需要改变一下
$scope.tags.push(filter);至
$scope.$apply(function () {
$scope.tags.push(filter);
});这是我的console.log测试

的好处是我学到了:<md-chips>指令只知道如果它的<chip>对象有$$hashKey,就需要更新它
见scope.$apply上的这
https://stackoverflow.com/questions/38073142
复制相似问题