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時間見てもそれを見ていないとは信じられません! 可能であれば、まずコンパイル関数の目的は何かを説明できますか?リンク、コントローラー、テンプレートがすべてを世話するなら、これは何のために使われるでしょう。そのユースケースはありますか? – MadOgre
それは味と実用性の問題です。 'compile'の目的は、テンプレートを修正し、リンク前および/またはリンク後の関数を返すことです。私はそれが 'template'関数の前にあって、歴史的な理由のために残っていると信じています。通常、 'template'と' controller'および/またはlink関数(1.5以上の$ onInitと$ postLinkコントローラフック)は仕事をすることができます。 – estus