2016-11-25 4 views
0

角の初心者。私は.green.defaultのCSSクラスを現在の.box要素でクリックして切り替えることを試みています。 [JB Nizetの提案した後、私は偽の、今それが働いているとnullを置き換える次のコードを修正しました]この単純なAngularJS反復でHTML要素の2つのCSSクラスを切り替えるにはどうすればよいですか?

index.htmlを

<div class="container"> 
    <div class="row"> 
     <!-- SELECTION APP --> 
     <div class="col-md-4 col-md-offset-4" ng-app="Selection" ng-controller="Selection as Select"> 
      <div class="row"> 
       <div class="col-md-12" ng-repeat="course in Select.data"> 
        <div class="box well clearfix " 
          ng-click="Select.toggleSelect(course)" 
          ng-class="{'green' : course.selected, 'default': !course.selected}" 
          > 
         <h3 class="courseName"><b>{{course.name}}</b>: ({{course.duration}} months) ${{course.price}}</h3> 
        </div> 
       </div> 
      </div> 
     </div> 
     <!-- /SELECTION APP --> 
    </div> 
</div> 

<script src="js/angular.min.js"></script> 
<script src="js/app.js"></script> 
<script src="js/controllers/Select.js"></script> 
<script src="js/factories/DataService.js"></script> 

JS/app.js

(function() 
{ 
    angular.module('Selection',[]); 

})(); 

js/controllers/Select.js

(function() 
{ 
    angular 
    .module('Selection') 
    .controller('Selection', Selection); 

    Selection.$inject = ['DataService'] 

    function Selection(DataService) 
    { 
     this.data = DataService.courseData; 
     this.currentClass = 'default'; 

     this.toggleSelect = function(course) 
     { 
      if (course.selected === false) 
      { 
       course.selected = true; 
      } 
      else 
      { 
       course.selected = false; 
      } 
     } 
    } 

})(); 

JS /工場/ DataService.js

(function() 
{ 
    angular. 
    module('Selection') 
    .factory('DataService', DataService); 

    function DataService() 
    { 
     return data = { 
      courseData: courseData 
     } 
    } 

    var courseData = 
    [ 
     { 
      name: 'AngularJS', 
      duration: 1, 
      price: 250, 
      selected: false 
     }, 
     { 
      name: 'NodeJS', 
      duration: 1.5, 
      price: 350, 
      selected: false 
     }, 
     { 
      name: 'ReactJS', 
      duration: 2.5, 
      price: 500, 
      selected: false 
     } 
    ] 

})(); 

プレビュー:

Preview

コンソールは、構文ではエラーを報告していないと私はにできませんよ私が間違っていた場所を見つけてください。エラーが見つかった場合には、私に助けてください。どうもありがとう。

+1

デバッガを使用してコードをステップ実行しましたか?簡単なconsole.log()ステートメントを追加しましたか?あなたはそれを自分で理解できるはずです。なぜ 'course.selected === 'null''は本当ですか?なぜ 'course.selected =!course.selected'を使わないのですか? –

+0

私は以前にselectedプロパティをnullに設定していたので、エラーに気付かなかった。私はnullをfalseに変更し、今は動作します。ありがとう。 – anonym

+1

コード設定にnullを設定するものは何もありません。そして、たとえあったとしても、「ヌル」と「ヌル」は全く異なる2つの事柄です。前者はヌルで、2番目の文字はn、u、l、lの文字を含むNULLではない文字列です。 –

答えて

1

3者演算子が間違っているようです。 = "?course.selected 'グリーン': 'デフォルト'"

NG-クラスcourse.selected場合

この方法では、真(または単にfalsyない)で、NG-クラスは、もちろん場合は緑色になります.selectedはfalse(または単に偽り)ですが、デフォルトになります。

+0

私は三項演算子を使用しようとしていませんでしたが、二つの異なる条件を使用しようとしていませんでした: コースが選択されている場合は緑、そうでない場合はデフォルトです。 しかし、はい、三元演算子を使用する方が良いアプローチのようですが、驚くべきことに、三項演算では機能しません! – anonym

+0

問題は、ng-classでは、3項演算子がオブジェクトとして機能しないということでした。だから、私は中括弧を削除し、今は動作します。しかし、私はこの答えを編集することに失敗しました。 – anonym

+0

編集中、中括弧を削除するのを忘れてしまいました。 –

関連する問題