Angular从另一个选择创建选择过滤器

时间:2015-12-28 09:36:49

标签: angularjs

我在这里找到了这个答案:https://stackoverflow.com/a/28357122/5459561

它在Plunker上运行得很好,但是当我在我的项目中实现它时,它不起作用。

我的HTML:

<div ng-controller="PolicyController as policy">
    <select multiple ng-model="proto" ng-init="proto=policy.protocols[0]"
    ng-options="protocol for protocol in policy.protocols"></select>
    <select multiple ng-model="fc" ng-options="function.code for function in
    policy.functions | filter:{protocol:proto}"></select>
</div>

我的JS:

app.controller('PolicyController', ['$http', function($http){
    var policy = this;
    policy.functions = [{"code": 1, "protocol": "A"},{"code": 2, "protocol": "A"},{"code": 3, "protocol": "B"},{"code": 4, "protocol": "C"}];
    policy.protocols = ["A", "B", "C"];

现在的问题是当我点击更改当前选择的协议时,代码消失了。但是当我第一次初始化页面时,我可以看到协议A的代码,这意味着&#39; ng-init&#39;工作正常。

注意:它在plunker中有效,如链接的答案中所示,但不在我的项目中。我使用角度V1.5.0,而Plunker使用1.1.5。虽然我不相信它会有所作为。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

只选择一个协议时,您的代码可以正常工作。但是,如果您选择多个协议,例如A和B,则scala> val rdd = sc.parallelize(List((1,2),(3,4),(3,6)),4) ... scala> rdd.partitions.size res6: Int = 4 scala> rdd.partitioner.isDefined res8: Boolean = false 变量包含数组$scope.proto,这会与您的过滤混淆。

this question上选择的答案是我能想到的最干净的解决方案。编写一个处理第一个选择值数组的函数,并根据该函数返回第二个选择的真或假。