1

2つのディレクティブが相互に通信できるように、コントローラーをディレクティブに正しく割り当てる方法。2番目のディレクティブのrequire引数を最初のディレクティブの名前に設定すると、コンソールでエラーが発生します。

エラー:コントローラーなし:ノードリンクFn(http:// ajax)のgetControllers(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.js:4132:19)エラー()でdir googleapis.com/ajax/libs/angularjs/1.0.4/angular.js:4259:35)compositeLinkFn(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.js:3869 _ _ :15) at CompositeLinkFn( http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.js:3872:13)at nodeLinkFn(http://ajax.googleapis.com/ajax/libs /angularjs/1.0.4/angular.js:4252:24)at CompositeLinkFnhttp://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.js:3869:15)at CompositeLinkFn(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.js:3872:13)publicLinkFn(http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4 _ _ /angular.js:3775:30)http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.js:934:25angular.js:5601 _ _ <div class="btn btn-danger" dir2=""> _

(無名関数)angular.js:5601

(無名関数)angular.js:4698

nodeLinkFnangular.js:4261

CompositeLinkFnangular.js:3869

CompositeLinkFnangular.js:3872

nodeLinkFnangular.js:4252

CompositeLinkFnangular.js:3869

CompositeLinkFnangular.js:3872

publicLinkFnangular.js:3775

(無名関数)angular.js:934

Scope。$evalangular.js:7905

Scope。$applyangular.js:7985

(無名関数)angular.js:932

invokeangular.js:2813

bootstrapangular.js:930

angleInitangular.js:906

(無名関数)angular.js:14600

cjquery-latest.min.js:3

p.fireWithjquery-latest.min.js:3

b.extend.readyjquery-latest.min.js:3

H

これがplnkrの例です。

編集 :

多くのウェブサイトに存在する何かをしようとしています。ボタンをクリックするか、リストビューからサムネイルビューなどにリンクしてビューテンプレートを変更します。ボタンスイッチャーと、ビューの「切り替え可能ビュー」と呼ばれるもう1つ。これがサンプルコード付きのplnkrです。「switcher」ディレクティブをクリックすると、切り替え可能なディレクティブのテンプレートが切り替わり、ビューが切り替わるという考え方です。これが十分に明確であることを願っています。私がやろうとしているのはこのplnkrのようなものです

前もって感謝します。

4

1 に答える 1

2

実際、ディレクティブ間でコントローラーを共有したい場合は、そのとき、または1つの要素、または階層の上位にある必要があります(requireの名前の前に「^」を追加します)。

したがって、あなたの質問に対する答えは次のようになります。必要なディレクティブ/コントローラーがDOM要素の階層の同じレベルまたは上位レベルにないため、このエラーが発生します。

attributesおそらく、リストを格納し、ディレクティブからこのリストを操作するためのコンテナーが必要だと思います。私の提案は、それらを保存するための別のディレクティブを用意することです(ngFormのように)。したがって、DOM階層の異なるリーフにある両方のdirectiveis(dir、dir2)には、共有データを含み、共通の階層を持つディレクティブが必要です。すこし:

──── attributesDirective (in controller: this.doSomething())
                     ├ dir1 (requre: '^AttributesDirective')
                     └ dir2 (requre: '^AttributesDirective')   

しかし、実際には、ディレクティブやJSコードを追加しなくても、「編集」で説明したことを実現できます。templateテンプレートファイルの名前を格納するプロパティを追加し、ユーザーがアイテムをクリックしたときにこのプロパティを変更します。ngInclude新しい値を取得し、テンプレートをリロードします。

このソリューションで変更されたプランカーは次のとおりです。http://plnkr.co/edit/z7wg1TCIdmQjfT8A2rZe?p = Preview

于 2013-02-07T10:07:11.500 に答える