2016-08-10 22 views
0

私のアプリケーションでangularJS 1.5 componentを使用しています。怒鳴るなどのコンポーネントのコントローラのサンプル・コード:私はこれを実行するとAngularJS 1.5コンポーネントのコントローラで別のメソッドを呼び出す

function testController() 
{ 
    var vm = this; 
    activate(); // this will be called on first load on component. 

    vm.testMethod = function() 
    { 
     return "test Method"; 
    } 

    function activate() 
    { 
     console.log(vm.testMethod()); 
    } 

私はエラー

TypeError: vm.testMethod is not a function.

を取得しています、私は私が私の中で、しかし、vm.を追加していないコントローラにローカル関数を作成することができます知っています必要があります、私はvm.testMethod()テンプレートで正しく使用されているいくつかのテキストを取得するために使用されている。例えば

--template code

{{$ctrl.testMethod()}} // This works properly and display 'test Method' on page. 

何らかの理由で、私は、例えば、別のメソッド内vm.testMethod()を呼び出すようにしようとしていますactivate()、上記のエラーが発生しますか?

何かが見つからない、またはできないことがあるかどうかを知ることができます。

+0

あなたは 'activate()'関数をどこで呼び出していますか? –

+0

コードが更新されました。したがって、基本的にはコンポーネントコントローラの負荷が呼び出されます。 – Kenz

答えて

1

あなたの問題は、それが機能宣言あるので

あなたactivate機能が掲揚された角度:-)とは何の関係もありません。それはなぜあなたが "それを書いた前に"それを呼び出すことができます。しかし、vm.testMethodは、の式であり、吊り上げられません。私は式と宣言がJavaScriptでどのように機能するかをより良く理解するためにthis articleを読むためにあなたをお勧めします

var vm = {}; 
 

 
console.log(vm.hello); 
 
vm.hello = function() {}; 
 
console.log(vm.hello);

:ここ

は問題あなたがたを示し、超簡単な例です。また、再び起きてからこれを防ぐために、あなたはthis advice from John Papaに従ってください:

は必ずコントローラの下部にある関数宣言を書いて、あなたのvm変数を定義したときに一番上に割り当てます。

+0

実際に私は質問をする前にこのオプションを試しました。私はこれらの機能の位置をシャッフルしてみましたが、エラーはそのままです。 – Kenz

+0

私が推測するものではありません:P 'activate()'を 'vm.testMethod'の割り当ての下に移動すると、https://jsbin.com/bacido/edit?js,console –

+0

を参照してください。関連するコードは表示されません。 – Kenz

関連する問題