はそれを短くするために、指示データとして子ディレクティブを使用します:P):AngularJSは何かのように、親ディレクティブ内のデータは、私が得たとして、私は子供のディレクティブを読み取る必要がある...
他のディレクティブを作成して、このリンク関数にヘッダーの配列のようなものを取得するにはどうすればよいですか?
はそれを短くするために、指示データとして子ディレクティブを使用します:P):AngularJSは何かのように、親ディレクティブ内のデータは、私が得たとして、私は子供のディレクティブを読み取る必要がある...
他のディレクティブを作成して、このリンク関数にヘッダーの配列のようなものを取得するにはどうすればよいですか?
実際には、ディレクティブコントローラと「結論」に深く浸ることができます。
親コントローラにアクセスするには、require
オプションを使用できます。
.directive 'parent', ->
controller: ->
@addHeader = (header) => #do add header
.directive 'child', ->
require: '^parent'
link: (scope, el, attr, parent) ->
parent.addHeader 'from child'
しかし、あなたの子リンク機能が実際に実行されていることを確認する必要があります。
たとえば、(WARNING JAVASCRIPT !!! :)はtransclude
オプションを使用できます。 Sophisticated Example。あなたは私の場合には、親コントローラ、 にアクセスすることができます原因私はこのように(オブジェクトにヘッダをプッシュするために、このインスタンスのメソッドを呼び出すので、私は、コントローラ上のオブジェクトのインスタンスを持っている範囲をアクセスもする必要はいけない
.directive('myTable', function() {
return {
restrict: 'E',
controller: function() {
var headers = []
this.headers = headers
this.addHeader = headers.push.bind(headers)
},
template: `
<table>
<thead>
<tr>
</tr>
</thead>
</table>
`,
transclude: {
// transclude all myHeaders into headers slot
headers: 'myHeader' // transclude (how this is a real word at all?)
},
link: function(scope, el, attrs, ctrl, transclude) {
var headerRow = el.find('thead').children('tr')
// append all headers into thead wrapping with th
transclude(function(headers) {
[].forEach.call(headers, header => {
var cell = angular.element('<th></th>')
cell.append(header)
headerRow.append(cell)
})
}, headerRow, 'headers')
console.log(ctrl.headers) // headers were populated here
}
}
})
.directive('myHeader', function() {
return {
restrict: 'E',
require: '^myTable',
transclude: true, // ohh more transclusions
template: '<span ng-transclude></span>',
link: function(scope, el, attrs, myTable) {
myTable.addHeader(attrs.name) // report to myTable
}
}
})
<my-table>
<my-header name="First"> First Header </my-header>
<my-header name="Second"> Second <span style="color:red;">Header</span> </my-header>
</my-table>
私が考えることができる唯一の方法は、あなたのリンク機能で要素パラメータを使用することです。 jqLiteメソッドを使用すると、ng-tableディレクティブ内にheaderタグを持つすべての要素を取得できます。
私が正しい場合、親スコープから子スコープにアクセスできなかったので、おそらくjqliteを使用することは唯一のオプションです。 AngularJS - Access to child scope
範囲を反映) –
多くのThanxs、チャームのように働いた! –
ところで、私はtransclude関数を必要としませんでした。私は親ディレクティブに 'transclude:true'と' 'を追加しました... htmlとcrazyを追加する方法を追加する必要はありませんもの。 thxたくさん! –