Javascript ng repeat内的动态ng开关
我正在尝试创建一个基于动态对象数组的开关 例如:Javascript ng repeat内的动态ng开关,javascript,angularjs,ng-repeat,ng-switch,Javascript,Angularjs,Ng Repeat,Ng Switch,我正在尝试创建一个基于动态对象数组的开关 例如: <div ng-switch on="currentItem"> <div ng-repeat="item in myItems" ng-switch-when="item.name"> <p>{{item.name}}</p> <button ng-click="nextItem(item)">Next Item</button>
<div ng-switch on="currentItem">
<div ng-repeat="item in myItems" ng-switch-when="item.name">
<p>{{item.name}}</p>
<button ng-click="nextItem(item)">Next Item</button>
</div>
</div>
{{item.name}
下一项
然后在我的控制器里
$scope.myItems = [{
"name": "one"
}, {
"name": "two"
}]
// Default first item
$scope.currentItem = $scope.myItems[0].name;
$scope.nextItem = function(med) {
for (var i = 0; i < $scope.myItems.length; i++) {
if ($scope.currentItem === $scope.myItems[i].name) {
if ($scope.myItems[i + 1] !== undefined) {
$scope.currentItem = $scope.myItems[i + 1].name
}
}
}
}
$scope.myItems=[{
“名称”:“一”
}, {
“姓名”:“两个”
}]
//默认第一项
$scope.currentItem=$scope.myItems[0]。名称;
$scope.nextItem=函数(med){
对于(变量i=0;i<$scope.myItems.length;i++){
如果($scope.currentItem==$scope.myItems[i].name){
if($scope.myItems[i+1]!==未定义){
$scope.currentItem=$scope.myItems[i+1]。名称
}
}
}
}
基本上,dom应该为每个项呈现一个div,当用户单击Next Item按钮时,currentItem应该更新,开关应该基于此触发
我没有看到我应该看到的第一个结果(没有呈现任何结果)。任何帮助都将不胜感激
Plunk:我已经用叉子叉了你的Plunk: 基本上,您没有以良好的方式使用
ngSwitch
只需使用ngIf:
<div ng-repeat="item in myItems">
<div ng-if="currentItem == item.name">
<p>{{item.name}}</p>
<button ng-click="nextItem(item)">Next Item</button>
</div>
</div>
{{item.name}
下一项
我已经用叉子叉了你的叉子:
与Ignacio Villaverde类似,但我更新了获取nextItem()的方式
您可能应该在currentItem中保留对整个对象的引用,而不仅仅是名称:
<div ng-repeat="item in myItems">
<div ng-if="item == currentItem">
<p>{{item.name}}</p>
<button ng-click="nextItem(item)">Next Item</button>
</div>
{{item.name}
下一项
简单多了 这工作正常。谢谢你。我签出了呈现给dom的内容,并且item.name没有使用开关呈现,因此它不能被允许。再次感谢你的帮助。
<div ng-repeat="item in myItems">
<div ng-if="item == currentItem">
<p>{{item.name}}</p>
<button ng-click="nextItem(item)">Next Item</button>
</div>