我正在开发一个使用“Widget布局”的应用程序。
用户获取的页面是一个仪表板,其中包含可以与之交互的不同小部件,例如表格,图形等。
我正在使用<md-chips>
添加全局 “过滤器”,其目标是拥有共享的过滤器所有小部件都可以被所有小部件更新。
我的过滤器列表使用<md-chips>
,只读和md-removable设置为True
。因此,只能通过与小部件交互来删除或添加过滤器(因此只能以编程方式添加)。
此“模块”的一个功能是在单击Graph元素时在字段上添加新过滤器。< / p>
示例: 现在我点击我的过滤器控制器的子控制器中的Graph元素,它将 过滤器控制器将相应地获取该事件并更新过滤器( 此时我希望 但相反,没有任何反应!而奇怪的部分是,当我点击其中一个现有芯片时,它会刷新(我有一个“测试”芯片)! TESTS :
所以当我在渲染之前在阵列上推测试芯片时: 然后点击一堆图形元素, 当 每次向 感谢阅读! 注意:我使用的是最新版本的Angular MATERIAL(HEAD MASTER),请参阅此处的文档:https://material.angularjs.org/HEAD/ |从GitHub存储库构建。 编辑:问题来自 $$ hashKey 没有添加到对象中,只有当我点击其中一个现有代码时才会添加它们,我需要在我添加新过滤器时找到添加此 $$ hashKey 属性的方法$emit
一个事件说给全局控制器:“我想更新过滤器!这里是过滤器添加“ $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
完全更新,但视觉保持不变,直到我选择芯片“测试”,然后所有<md-chips>
看起来就像触发一些刷新功能。<md-chips>
元素未被刷新为$scope.tags
(其模型)更新时的任何提示更新 BUT 会在选择芯片时更新?md-on-select
添加新过滤器时,我都尝试触发$scope.tags
强制这种行为,但到目前为止我没有运气!
答案 0 :(得分:2)
问题来自缺少 $$ hashKey ,当我为我的筹码($ scope.tags)添加了一个新过滤器到我的过滤器模型时。
所以我只需要改变
$scope.tags.push(filter);
到
$scope.$apply(function () {
$scope.tags.push(filter);
});
我学到的好东西:
<md-chips>
指令只知道如果<chip>
对象的 $$ hashKey
请参阅范围{$ 3}上的this。$ apply