2016-10-15 2 views
0

AngularJsの基本的な概念の理解が非常に低いため、問題に直面しています(私は思っています)。私はクリック可能な単語のリストを持っています。私がそれらをクリックすると、ブートストラップの「ラベル」クラスを使用して色が(個別に)変更されます。それはうまく動作しますが...(ここは:) :):私は '私は' this.selected 'を'に設定することができないため、私は私の色を初期状態に戻すことができません ' false '...以下のコードを参照してください。ng-repeatでng-clickした後にinit状態に戻りますか?

私はそれが難しくないと確信していますが、誰かが私にヒントを与えることができたら、私は感謝します。

<h2 class="jumbleW inline" ng-repeat="w in word track by $index"> 
    <span ng-class="{'label': true, 'label-primary': !this.selected, 'label-warning': this.selected}" ng-click="pickWord(w)">{{w}}</span> 
</h2> 

<button class="btn btn-danger btn-xs" ng-click="clear()">Try again</button> 

EDIT:初心者のミスに申し訳ありません。私は上記のコード(裸のHTML)の版を受け入れました。

$scope.pickWord = function(w){ 
    this.selected = !this.selected; 
    if (this.selected == false) { 
     $scope.playerAnswer = $scope.playerAnswer.replace(w, ""); 
    } else { 
     $scope.playerAnswer += w; 
    } 
} 
+0

は、この完璧な答えのためのHTML –

+0

おかげ@Arunaとの完全なコードを表示します!私は有益な答えに投票することはできませんが、あなたが改善し、完璧に働くことができました。私はこれを行うより簡潔な方法を想像しましたが、これは私が通常やることのようなものなので、私は常にそれが最良の方法ではないように感じています(私は間違っているはずです!ところで、誰かが私の質問に投票しました:(研究はありませんか?私は約1時間を過ごしました、それはばかげて聞こえるかもしれませんが、初心者が存在し、初心者の問題を抱え、間違った方向を見ているかもしれません) – Celfred

+0

@Celfredあなたが初心者であるときに誰が投票したかを聞いて、わからないことは素晴らしいことです。私はとにかく、幸せなコーディングをあなたに投票します:-) – Aruna

答えて

0

thisを使用しないでください: はここにも私のpickWord()関数()です。その代わりに、ng-repeatオブジェクトwにオブジェクトを追加するか、それ以外の場合は、以下のように選択されたインデックスの配列を作成します。

html

<h2 class="jumbleW inline" ng-repeat="w in word track by $index"> 
     <span ng-class="{'label': true, 'label-primary': selectedItems.indexOf($index) === -1, 'label-warning': selectedItems.indexOf($index) !== -1}" ng-click="pickWord(w, $index)">{{w}}</span> 
    </h2> 

<button class="btn btn-danger btn-xs" ng-click="clear()">Try again</button> 

JS

$scope.pickWord = function(w, i){ 
    if(!$scope.selectedItems){ 
     $scope.selectedItems = []; 
    } 

    var index = $scope.selectedItems.indexOf(i); 

    if(index === -1) { // not selected already and add 
     $scope.selectedItems.push(i); 
     $scope.playerAnswer += w; 
    } else { // selected already and remove 
     $scope.selectedItems.splice(index, 1); 
     $scope.playerAnswer = $scope.playerAnswer.replace(w, ""); 
    } 
} 

$scope.clear = function(){ 
    $scope.selectedItems = []; 
}; 
関連する問題