4

多くの食品入力を印刷するために ng-repeat を使用しています。現在、次のように ng-init を使用して入力の値を初期化しています。

 <div class="formitem" ng-repeat="food in foodlist" ng-init="food.slider=0; food.unit.selected = food.unit[0];">

ただし、初期化された値に対してより複雑な処理を行いたいと考えています。つまり、 in が arrayfoodに既に存在するかどうかを確認したいのです。存在する場合は、に格納されている値を初期値として使用します。そうでない場合は、初期値として 0 を使用します。foodlisteditedFoodeditedFood

したがって、この処理をマークアップからコントローラーに移動する必要があると思いますが、どこでどのようにこれを行うかを理解するのに十分なAngularを理解していません。この ng-repeat はコントローラー FoodCtrl 内にあります。

myApp.controller('FoodCtrl', function ($scope, $http, $location, $anchorScroll, $filter) { }

この初期化処理は FoodCtrl 内で行うべきですか? FoodCtrlの各内部の値を初期化するにはどうすればよいfood.sliderですか?food.unit.selectedfood 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' がありません`

私はかなり困惑しています。

4

3 に答える 3

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)">

それが理想的かどうかはわかりませんが、機能しています。

于 2013-11-05T21:11:54.283 に答える
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];

これらは、コントローラの初期化ごとに 1 回設定されることに注意してください。

物事が定義されている場合、またはそれらにデフォルトの設定が必要な場合は、より複雑なロジックを処理する必要がある場合があります。

http://docs.angularjs.org/api/ng.directive:ngInit

編集済み

あなたがやろうとしていたことを誤解しています...これが正しい方法です。

$scope.foodlist.forEach(function(food){
    food.slider = 0;
    food.unit.selected = food.unit[0];
});
于 2013-11-05T19:47:22.193 に答える
0

コントローラーに次のようなものを追加するだけです。

$scope.foodlist.forEach(function(food) {
    food.slider = 0;
    food.unit.selected = food.unit[0];
});
于 2013-11-05T19:48:33.463 に答える