2013-10-24 10 views
5

内部の作業ではありません。なぜそれが動作していないか、あなたはそれを行う別の方法を提案することができますか?ngのクラスは、私はディレクティブを作成しようとしたディレクティブ

これは私のコントローラである:

app.controller("controller", function ($scope) { 
    $scope.chargeability = [{ date: '15-Sep-13', max: 100, current: 100 }, 
    { date: '30-Sep-13', max: 60, current: 50 }, 
    { date: '15-Oct-13', max: 80, current: 20 }]; 
    $scope.ytd = 122; 
}); 

、ここでは、HTMLのボディです:

<div ng-repeat="charge in chargeability"> 
<bars-current style="z-index:999999;" value="{{charge.current}}">current:{{charge.current}}</bars-current> 
<div style="clear:both;height:6px;"></div> 

私はNG-クラスでこのスタイルを実現したいと思います:

<style> 
.greater { 
    color:#D7E3BF; 
    background-color:#D7E3BF; 
} 
.less { 
    color:#E5B9B5; 
    background-color:#E5B9B5; 
} 
</style> 
+2

whileループの後に、ディレクティブに '$ compile(element.contents())(scope);'を追加してみてください。 – AlwaysALearner

+0

@ CodeHaterが正しいです。また、 '$ compile'をディレクティブに挿入する必要があります。 –

+0

@ CodeHater、$ compile(element.contents())(scope)を追加しようとしました。それでも動作しない – user2756589

答えて

4

あなたはディレクティブ内のlink関数で作業しているため、$compileサービスを使用する必要があります。あなたは$compileサービスを経由して、変更を実行しない限り、

あなたがlink機能を打ったら、DOMがすでに構築されており、角度は、あなたがlink関数内DOMに加えた変更を認識しません。

は(未テスト)これを試してみてください:

app.directive('barsCurrent', function ($compile) { 
    return { 
     restrict: 'E', 
     link: function postLink(scope, element, attrs) { 
      attrs.$observe('value', function (newValue) { 
       // value attribute has changed, re-render    
       var value = Number(newValue); 
       var dval = value/3; 
       element.children().remove(); 
       while (dval > 0) { 
        var newDom = '<div id="bar" ng-class="{true: \'greater\',false: \'less\'}[charge.current >= charge.max]" style="float:left; color:green; height: 17px;margin-top:7px;background-color:green;">.</div>' 
        element.append($compile(newDom)(scope)); 
        dval--; 
       } 
      }); 
     } 
    }; 
}); 

は、ここでディレクティブlink関数内$compileを使用する例のjsfiddleです:

Fiddle

UPDATE:ここ

が持つjsfiddleですあなたが望む結果を提供するいくつかの変更点:

Fiddle

UPDATE 2:

私は再びフィドルを更新しました。今はあなたが望む結果になるはずです。同じフィドル、ちょうど更新されました。 (上記のリンクを使用してください)。

+0

こんにちは、タイソン、まだ動作していません..それはngクラス内のcharge.currentとcharge.maxを検出できないためだと思いますか? – user2756589

+0

そうかもしれません。ディレクティブはスコープを分離していないので、親スコープからスコープ変数を見ることができるはずです。それは 'charge.current'と' charge.max'が存在する場所ですか? ディレクティブリンク関数の中で 'console.log'を試してみましょう。ちょうど彼らがディレクティブによって参照できることを確認します。 また、 'ng-class'を使っている方法に慣れていないので、それがうまくいくかどうかは言えません。 'ng-class 'の中の論理が複雑になるなら、私は通常それを別の' scope'メソッドに移します。 –

+0

ng-classはdivのバックグラウンドカラーを変更するだけです。これは充電の場合です。私は、リンク機能の中にconsole.logを配置しようとしました。しかし、私は未定義の電荷のようなエラーを打ちました...そして、barcurrent全体が既に働いていませんでした。 – user2756589

関連する問題