我正在使用 ng-repeat 打印出许多食品输入。我目前正在使用 ng-init 来初始化输入值,如下所示:
<div class="formitem" ng-repeat="food in foodlist" ng-init="food.slider=0; food.unit.selected = food.unit[0];">
但是,我想对初始化值做一些更复杂的处理。也就是说,我想检查 foodlist
中的 food
是否已经存在于数组 editedFood
中。如果是,则使用存储在 editedFood
中的值作为初始值。如果不是,则使用 0 作为初始值。
因此,我想我需要将此处理从标记中移出并移至 Controller ,但我对 Angular 的了解还不够深,无法理解在哪里以及如何执行此操作。这个 ng-repeat 位于 Controller FoodCtrl 中:
myApp.controller('FoodCtrl', function ($scope, $http, $location, $anchorScroll, $filter) { }
我应该在 FoodCtrl 中进行初始化处理吗?如何为 FoodCtrl 中的每个 food in foodlist
初始化 food.slider
和 food.unit.selected
的值?
The Plunkr
更新
我现在已经尝试将它的变体添加到 FoodCtrl
中,既添加到 Controller 的顶层又添加到函数中,但没有成功:
$scope.foodlist.food.slider = 0;
错误:类型错误:无法设置未定义的属性“ slider ”
$scope.food.slider = 0;
错误:类型错误:无法设置未定义的属性“ slider ”
if ($scope.foodlist.food.slider !== undefined) {
console.log("slider")
$scope.foodlist.food.slider = 0;
}
错误:类型错误:无法设置未定义的属性“ slider ”
$scope.foodlist.forEach(function(food) {
food.slider = 0;
food.unit.selected = food.unit[0];
});
错误:`TypeError: Object # has no method 'forEach'``
我觉得很难过。
最佳答案
在你的 Controller 中添加这样的东西。
$scope.foodlist.forEach(function(food) {
food.slider = 0;
food.unit.selected = food.unit[0];
});
关于javascript - 如何将这些 ng-init 移动到 Controller 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19797435/