参照
参照プランカー: http://plnkr.co/edit/otv5mVVQ36iPi3Mp0FYw?p=preview
問題の説明
と の 2 つのディレクティブがあるfirst-directive
としsecond-directive
ます。ここで、ラップして独自の操作された属性に渡すことfirst-directive
を望んでいるアクセスしかないとします。second-directive
app.directive('firstDirective', function() {
return {
scope: true,
priority: 1000,
transclude: true,
template: function(element,attributes){
console.log('template')
return '<second-directive two="{{one}}"></second-directive>'
},
compile: function(element,attributes) {
console.log('compile')
return {
pre: function(scope){
scope.one = 'foo'
console.log('cpre')
},
post: function(scope){
scope.one = 'foo'
console.log('cpost')
},
}
},
controller: ['$scope','$attrs',function($scope,$attrs){
console.log('controller');
$scope.one = 'foo';
}],
}
})
app.directive('secondDirective',function(){
return {
template: function (element,attributes){
console.log(attributes.two) //{{one}} not 'foo' or 'test'
return 'Hello {{two}}'
}
}
});
first-directive
次のように呼び出されます。
<first-directive one='test'></first-directive>
console.log は次のように出力されます。
template
compile
{{one}}
controller
cpre
cpost
このことから、コンパイル前にテンプレートが呼び出されることを学びました。これは、コンパイル、コントローラー、プリ、またはポスト リンクを介してテンプレート関数によって返された値を操作する方法がないため、私の初心者の目には独特です。
質問はこれです:
必要な動的属性値でを呼び出すにはどうすればよいsecond-directive
ですか? second-directive
は完全に独立しており、そこにコードを追加できないことに注意してください。
PS - 私が考えている考えの 1 つは、次のように 2 番目のディレクティブを呼び出すことです。
template: function(element,attributes){
console.log('template')
var explicit = ???? /* how to access scope? */
return '<second-directive two="'+ explicit +'"></second-directive>'
},
または代わりに
template: function(element,attributes){
console.log('template')
return $interpolate('<second-directive two="{{one}}"></second-directive>')(scopeObj) /* how does one access scopeObj with current scope values here? */
},
繰り返しますが、他の関数が呼び出される前に first-directive に渡される値を取得する方法がわかりません。コントローラーは $scope にアクセスでき、AFTER テンプレートと呼ばれます。
あなたの提案は大歓迎です。