我正在编写选择按钮菜单,当我尝试进入下一个选择级别时没有任何反应。
在第一个列表项中,我想从下一个级别写入选定的值,在第二个列表中,我已成功列出了第一级的所有项目,而在第三个项目中,我想显示第二个(最后一个)级别的选项。
我的代码如下:
<div ng-if="selected.type=='number' && selected.values[0].values">
<ul class="smsUl">
<li ng-if="selected.selected">
<button class="btn btn-warning btn-block">{{selected.selected}}</button>
</li>
<li ng-repeat="value in selected.values" ng-if="attributes == undefined">
<button class="btn btn-info btn-block" ng-click="$parent.attributes=value.values">{{value.value}}</button>
</li>
<li ng-repeat="attribut in attributes" ng-if="attributes != undefined">
<button class="btn btn-info btn-block" ng-click="selected.value=attribut.id; selected.selected=attribut.value; attributes=undefined">{{attribut.value}}</button>
</li>
</ul>
</div>
jason with selected.values的一部分看起来像:
[
{
"value": "clothing_glasses",
"values": [
{
"id": 1,
"value": "coat"
},
{
"id": 2,
"value": "glasses"
}
]
},
{
"value": "book_stationery",
"values": [
{
"id": 3,
"value": "book"
},
{
"id": 4,
"value": "document"
}
]
}
]
在nf-if表达式中我试过:
!attributes
但没有任何改变。
如果我静态地在控制器中设置属性变量,它会列出我想要的内容,但是如果我选择,我应该回到1.级别。
答案 0 :(得分:0)
你确定你没有在控制器中做这样的事情:
$scope.attributes = [someArray]
(bla bla, some code)
$scope.someOnClickFunction = function() {
$scope.attributes = [otherArray]
}
如果是这样,那么你正在失去正确变量的范围,而角度不再看你认为它应该是什么。
我建议创建一个名为eg的对象。 “可观察”,将所有这些'属性','选中'等放在那里,然后添加到你的控制器中:
$scope.$watchCollection('observable.attributes', function() {});
$scope.$watchCollection('observable.selected', function() {});
当你想要更改那些数组中的某些东西时,不要替换它们(通过将新数组应用于旧变量)。 如果您不想玩pushgin,移动,弹出元素,您可以随时使用:
someDefinedArray.length = 0;
for-loop {
someDefinedArray.push(yoursobjects); //push objects back to array but with changes you wanted to make to array
}