1

私は何度も検索しましたが、私が思いつくことは、コンパイル関数の基本的なことを理解できないことだけです。 データ:をし、 "someValueの" 変数を参照してくださいしていないようだ。ここ指示文でコンパイル関数からコントローラにアクセスする

は私が

angular.module("app", []) 
.directive("foo", function(){ 
    return { 
    scope: {}, 
    controller: function() { 
     this.someValue = 23; 
    }, 
    contollerAs: "ctrl", 
    compile: function(tElem, tAttrs) { 
     tElem.html("<h1>Data: {{ctrl.someValue}}</h1>"); 
    }, 
    template: '<h1>test</h1>' 
    } 
}); 

このディスプレイを持っているものです。 しかし、controllerAs構文の代わりにscopeを使用すると、それは機能します。

//this works fine 
angular.module("app", []) 
.directive("foo", function(){ 
    return { 
    scope: {}, 
    controller: function($scope) { 
     $scope.someValue = 23; 
    }, 
    contollerAs: "ctrl", 
    compile: function(tElem, tAttrs) { 
     tElem.html("<h1>Data: {{someValue}}</h1>"); 
    }, 
    template: '<h1>test</h1>' 
    } 
}); 

これが表示されます。データ:23

は、私がここで行方不明です何かはありますか?コンパイルを正しく使用していますか? マニュアルがあまり役に立たないようです。

答えて

2

タイプミスがあります。それはcontrollerAsであり、contollerAsではありません。

compileの代わりにtemplate functionを使用することをお勧めします。これにより、ダミーの<h1>test</h1>テンプレートがない場合、上記の指示文のcompileは正しく機能しません。

+0

うわー、完全に恥ずかしい。私はそのコードを2時間見てもそれを見ていないとは信じられません! 可能であれば、まずコンパイル関数の目的は何かを説明できますか?リンク、コントローラー、テンプレートがすべてを世話するなら、これは何のために使われるでしょう。そのユースケースはありますか? – MadOgre

+1

それは味と実用性の問題です。 'compile'の目的は、テンプレートを修正し、リンク前および/またはリンク後の関数を返すことです。私はそれが 'template'関数の前にあって、歴史的な理由のために残っていると信じています。通常、 'template'と' controller'および/またはlink関数(1.5以上の$ onInitと$ postLinkコントローラフック)は仕事をすることができます。 – estus

関連する問題