Javascript 如何为ng repeat中的每个ng模型指定唯一标识符?
我有一个包含多个AngularUI滑块的页面,还有一个显示每个滑块值的跨距,其中有一个ng绑定。它看起来像这样:Javascript 如何为ng repeat中的每个ng模型指定唯一标识符?,javascript,angularjs,Javascript,Angularjs,我有一个包含多个AngularUI滑块的页面,还有一个显示每个滑块值的跨距,其中有一个ng绑定。它看起来像这样: <div class="formitem" ng-repeat="food in foodlist" > <div ui-slider="{range: 'min'}" min="0" max="{{ unit.max }}" ng-model="demoVals.slider" class="food-slider" > <
<div class="formitem" ng-repeat="food in foodlist" >
<div ui-slider="{range: 'min'}" min="0" max="{{ unit.max }}" ng-model="demoVals.slider" class="food-slider" >
<div class="begin">1</div>
<div class="end"> {{ unit.max }} {{ food.uid }} </div>
</div>
<span ng-bind="demoVals.slider"></span>
</div>
如何将food.uid添加到每个食品的ng模型中?使用单个元素而不是使用数组似乎不是一个好的体系结构选择。您应该尝试切换以将滑块值放入数组中 然而,您可以使用一些控制器功能来实现您想要的功能,尽管它相当难看。在
ng repeat
中,您可以绑定到函数
<div ng-bind="test(food.uid)"></div>
您希望在每次迭代的demoVals中添加一个
food.uid
属性。这就需要在每次迭代中执行js代码。这只能在指令中完成(IMHO)
因此,这里有一个工作模式
下面是修改html的方法(请注意repeat指令
…指令:)
ng模型不接受表达式,因为它需要映射到范围对象。你尝试过$index吗?不知道如何实现这一点,但是你是否考虑让它们成为数组的元素?创建一个演示,可能是通过指令或滑块回调的其他方式,有些遍历你可以做任何你认为正确的事情,这不是一个好的架构选择。我试图解决一个范围问题,而解决范围问题本身可能会更好。但这被认为是正确的,因为它向我展示了我是如何解决这个问题的。这是我最新的问题:
<div ng-bind="test(food.uid)"></div>
$scope.test = function test(v) {
var t = $scope.$eval("demoVals.slider" + v);
return t;
};
<div class="formitem" ng-repeat="food in foodlist" repeat-directive>
<div ui-slider="{range: 'min'}" min="0" max="{{ unit.max }}" ng-model="demoVals.slider" class="food-slider" >
<div class="begin">1</div>
<div class="end"> {{ unit.max }} {{ food.uid }} </div>
</div>
<span ng-bind="demoVals.slider"></span>
var app = angular.module('plunker', [])
.directive ('repeatDirective',function () {
return {
restrict: 'A',
link: function (scope, element, attr) {
console.log('linking directive ',scope.demoVals)
if (scope.food){
// you have a value for food
// you can add it as an attribute to demoVals
scope.demoVals['prop'+scope.food.uid] = scope.food.name;
}}
}
});