2016-09-23 14 views
1

私は現在、<li>をクリックしてngClickでいくつかのデータを送信できる単純な1ページアプリケーションを開発中です。この<li> sの私がangular.elementとすべてのものにCSSスタイルを適用<div>親を持っている...DOMを操作するAngularJSディレクティブと通信する

私はこのngClickをクリックすると、問題は、私はいくつかの$http呼び出しを行うと、内部コントローラ変数を埋めるためにJSONを取得することです。したがって、コントローラとディレクティブの点で共通点がない他のメニューをユーザがクリックすると、別のリストが埋められ、ユーザがこのリストをクリックすると、前述の<li>のスタイルを設定する必要があります。

directiveにあるlinkの参照をどのように伝えるべきか、わからないいくつかのプロパティでスタイルを設定する必要があります。私は、コントローラから指示文に渡す情報を格納するサービスを使うことを考えましたが、私はAngularを初めて使っていて、何をすべきか分かりません。私は多くを検索しましたが、私が探しているものを正確に見つけられませんでした。私は$watchを使用することを考えましたが、私の変数はそれがコントローラ上にあることを監視するため、私は親スコープに2回戻ってそれに到達する必要があります。

ありがとうございます!

+0

どのような条件でもng-styleまたはng-classを使用できます。 – Hmahwish

+0

私はJSONからデータベースから読み込まれる 'background-image'として使われるいくつかの画像を利用しているので、私はそれを使うことができません。ありがとう! – matiaslauriti

答えて

1
<div ng-controller="Ctrl as ctrl" ng-style="ctrl.style"> 
    <my-dir on-fetch="ctrl.style = $style"></my-dir> 
</div> 

module.directive('myDir', function(){ 
    return { 
     restrict: 'E', 
     template: '<li ng-click="$ctrl.fetch()"></li>', 
     controller: function(){ 
      var $ctrl = this; 
      this.fetch = function(){ 
       api.fetch().then(function(stylesFromResponse){ 
        $ctrl.onFetch({$style: stylesFromResponse}); 
       }); 
      }; 
     }, 
     bindToController: true, 
     controllerAs: '$ctrl', 
     scope: { 
      onFetch: '&' 
     } 
    }; 
}); 
+0

私はあなたが書いたことをほとんど理解していません...あなたの答えで説明できるので、私はそれを適応させることができます、ありがとう! – matiaslauriti

+0

私が理解しているように、あなたはデータをフェッチし、親コントローラと通信しなければならない命令を持っています。私の例では、liをmyDirにフェッチすると、内部的にonClickを処理し、フェッチの準備ができたらコントローラメソッドまたは外部コードを呼び出します。 –

+0

私は、外のコードに値を提供する方法を示すために、例を編集します –

関連する問題