我正在使用ng-repeat打印出许多食物项目输入。我目前正在使用ng-init来初始化输入的值,如下所示:
<div class="formitem" ng-repeat="food in foodlist" ng-init="food.slider=0; food.unit.selected = food.unit[0];">
但是,我想对初始值进行更复杂的处理。也就是说,我想检查food
中的foodlist
是否已存在于数组editedFood
中。如果是,则使用editedFood
中存储的值作为初始值。如果不是,请使用0作为初始值。
所以,我想我需要将这个处理从标记移到控制器上,但我不太了解Angular,以便了解哪里和哪个?这该怎么做。这个ng-repeat位于控制器FoodCtrl中:
myApp.controller('FoodCtrl', function ($scope, $http, $location, $anchorScroll, $filter) { }
我应该在FoodCtrl中进行初始化处理吗?如何为FoodCtrl中的每个food.slider
初始化food.unit.selected
和food in foodlist
的值?
更新
我现在尝试将此变体添加到FoodCtrl
中,无论是在控制器的顶层还是函数中,都没有运气:
$scope.foodlist.food.slider = 0;
错误:TypeError: Cannot set property 'slider' of undefined
$scope.food.slider = 0;
错误:TypeError: Cannot set property 'slider' of undefined
if ($scope.foodlist.food.slider !== undefined) {
console.log("slider")
$scope.foodlist.food.slider = 0;
}
错误:TypeError: Cannot set property 'slider' of undefined
$scope.foodlist.forEach(function(food) {
food.slider = 0;
food.unit.selected = food.unit[0];
});
错误:`TypeError:对象#没有方法'forEach'``
我感到非常难过。
答案 0 :(得分:0)
ng-init指令将添加当前范围之外的属性。
所以你正在做的就是这个(在控制器内部):
//ng-init="food.slider=0; food.unit.selected = food.unit[0];
$scope.food.slider = 0;
$scope.food.unit.selected = food.unit[0];
请注意,每次初始化控制器时都会设置一次。
如果定义了事物或者它们应该具有默认设置,您可能需要更复杂的逻辑来处理。
http://docs.angularjs.org/api/ng.directive:ngInit
<强> EDITTED 强>
误解了你试图做的事情......这是正确的方法。
$scope.foodlist.forEach(function(food){
food.slider = 0;
food.unit.selected = food.unit[0];
});
答案 1 :(得分:0)
在您的控制器中添加类似的内容。
$scope.foodlist.forEach(function(food) {
food.slider = 0;
food.unit.selected = food.unit[0];
});
答案 2 :(得分:0)
我通过向控制器添加一个函数foodInit(food)
来完成它:
$scope.foodInit = function(food) {
food.slider = 0;
food.unit.selected = food.unit[0];
console.log(food)
}
用ng-init调用它:
<div class="formitem" ng-repeat="food in foodlist" ng-init="foodInit(food)">
不知道这是否理想,但它正在发挥作用。