2016-09-11 19 views
0

私は以下のコードスニペットを持っています。ここでanglejsのコントローラ内でjavascript関数を呼び出す方法

sample.js

(function() { 
    /*global angular */ 
    'use strict'; 

    angular.module('myapp', ['spinner']) 
     .controller('myCtrl', ['$scope', '$window', function ($scope, $window) { 

    $scope.methodname = function() { 
      if(something){ 
       /* Doing some operations */ 
      } 
    }; 
    /* Here I need to define the callme javascript function */ 

    function callme(response){ 
     /* If I call like this, I'm getting error in console. */ 
    } 

    }]); /* Controller ends here */ 

    /* Creating a new anonymous function to perform some operations */ 
    (function() { 
    'use strict'; 


    /* Edited */ 
    code.util.myHTTP(url, function (response) { 

      // Adding response to session storage 
      callme(response); 

      }, function() { 
       // Removing from session storage 
     }); 

     })(); 
    }()); 

、私は角度のコントローラ内部でcallme javascript関数を呼び出すことができません。 私は

Uncaught ReferenceError: callme is not defined 

のようにコンソールでエラーを取得していますこれを達成する方法はありますか?

編集:

私は、コントローラ内のcallme関数を定義しています理由です、callme関数内いくつかのコントローラパラメータを使用する必要があります。

私はすでに、私はここにmyCtrlを追加する必要がありますどのように

.run(function($rootScope, $log, $window) { 
}); 

以下のように私のjsファイル内の関数を実行していますか?あなたはあなたのcallmeコントローラ機能を使用したい場合は

+0

callmeはどのコントローラのパラメータを使用していますか? – Zakaria

+0

$ window、$ logのようなもの –

+0

私の要件は、匿名関数の呼び出しと同じですが、いくつかのAPIの応答があります。応答を処理するメソッドを呼び出す必要があります。これらのコントローラのパラメータのために、私はcontollerの中に自分のメソッドを定義したかったのです。これを達成する別の方法がありますか? –

答えて

1

まず汚い方法は、その後、あなたはそれを公開する必要があります。あなたが書いたように、それはまだプライベートです。 、そして、

... 
$scope.callme = function(){ 
... 
} 
.. 

コントローラが到達可能であることができるようにモジュールでこの機能を使用します:それはパブリックにするには、ちょうどあなたのコントローラの範囲(あなたがscope.methodnameでやったように)それを「追加」

angular.module('amodule').run(['myCtrl ', function(myCtrl){ 
    myCtrl.callme(); 
}]); 

行うための最善のことは、あなたがサービスを共有したいと工場を使用することです

別の方法:

をあなたは外の角度、そのサービスを呼び出したい場合は(あなたがやりたいと思っているよう)

angular.module('amodule').run(['myservice ', function(myservice){ 
    myservice.callme(); 
}]); 

その後、新しいモジュールでは、そのメソッドを呼び出す

angular.injector(['myservice']).get('callme').call(); 

編集: あなたを1回の実行でサービスまたはコントローラを挿入することを宣言できます。それが動作します。 モジュールのrunメソッドでコントローラを注入すると、設計が悪いことに注意してください。 工場/サービスを使用してデータ/サービスを共有します。 より多くのコードがあれば、より多くのことを助けることができると確信しています。

+0

あなたの答えをありがとう。私はすでにいくつかの操作を行う機能を実行しています。同じページ/同じファイルで複数の実行機能を使用できますか? –

+0

編集したもう1つの質問があります。あなたはそれに答えることができますか? –

関連する問題