2016-06-13 16 views
0

すべてのページにロードするウェブサイトのフッターセクションに対して、AngularJSのディレクティブを作成しました。内部では、ページがロードされた後に実行する必要のあるjQueryコードをいくつか追加しました。これは、そのことを考えるための唯一の解決策でした。ここではそれがどのように見えるかの例を示します。AngularJSディレクティブのファイルからJavaScriptコードを実行しています

app.directive('footer', function() { 
    return { 
     restrict: 'A', 
     replace: true, 
     scope: {user: '='}, 
     templateUrl: "PATH_TO_HTML_FILE", 
     controller: ['$scope', '$filter', function ($scope, $filter) { 
      // Some random jQuery goes here, for example: 
      $('.search-nav > a').on('click', function(){ 
       $('.search-drop-down').slideDown(); 
      }); 

      // Close Search form 
      function closeSearchField() { 
       $('.search-drop-down').slideUp(); 
      } 
     }] 
    }; 
}); 

私はそれを行うための最善の方法だかはわからないが、私は今、やりたいことは、別のファイルにコントローラで、このjQueryのコードを取得することです。その理由:私たちが扱っているフロントエンドの人は、AngularJSがディレクティブなどについて言及していないことを知らないので、ページロード時に実行されるすべてのjQueryコードで別々のファイルを作成したい場合、必要です。ディレクティブ自体が読み込まれると、私はちょうどファイルのcontectを取得し、上のコントローラの本体で実行したいと思います。どのようにそれを行う上の任意のアイデアですか?あるいは、全体の問題に対するより良い解決策ですか?

+0

あなたのウェブサイトは[SPA](https://en.wikipedia.org/wiki/Single-page_application)ですか?それはすべてのビューの変更にリロードかどうか)?そうであれば - すべてのビューの変更時にこの* jquery code *を実行するか、または1回だけ実行しますか? SPAでない場合は、ヘッダーにこのスクリプトを含めてください。 – fracz

+0

この場合、SPAのウェブサイトです。すべての変更に対して実行したいコードの一部ですが、一部は変更しません。実際には、私がディレクティブをビューに持っているかどうかによって異なります。ディレクティブ固有のコードを個別のスペースに配置する方法を探しています。 html、js、およびcss。 – mmvsbg

答えて

1

あなたは別のファイルでコントローラを定義し、名前だけでディレクティブでそれを参照することができます。

app.directive('footer', function() { 
    return { 
     restrict: 'A', 
     replace: true, 
     scope: {user: '='}, 
     templateUrl: "PATH_TO_HTML_FILE", 
     controller: 'footerCtrl' 
}); 

ます。また、取得することができます

コントローラ

app.controller('footerCtrl', footerCtrl); 

//You are not actually using it in the controller, so you can remove it if you don't need it 
footerCtrl.$inject = ['$scope', '$filter']; 

function footerCtrl($scope, $filter){ 
    // Some random jQuery goes here, for example: 
      $('.search-nav > a').on('click', function(){ 
       $('.search-drop-down').slideDown(); 
      }); 

      // Close Search form 
      function closeSearchField() { 
       $('.search-drop-down').slideUp(); 
      } 
} 

指令このコードを完全に削除して、0123を使用してアニメーションにCSSクラスを使用するだけですをクリックしてクラスを追加/削除する

+0

クラスを追加したり削除したりするだけではありません。あなたのアプローチはまあまあですが、角度、実際にどの角度がわからない人から隠したいと思っている注射、コントローラ、その他の角度関連のもののような "奇妙な"ものがあるAngularファイルです。 – mmvsbg

+0

唯一の必要条件は、この*エイリアン*コードをグローバル関数、例えば 'function footerCtrl(){/ * some random jquery * /}'で囲むことです。 Angularはこれをコントローラとして使用できるようになりました。 [これを参照](http://codepen.io/fracz/pen/ezZVWY)。 – fracz

+0

これは "エイリアン"コードの2行だけです。彼らはそれを無視することができます、残りは純粋なJS/jQueryです – Tomer