3

入力フィールドにタグを定義して、AngularUISelect2ディレクティブを使用します。入力自体がカスタムディレクティブ内にある場合、入力は正しく初期化されず、コンソールでエラーが発生します。

query function not defined for Select2 tagging

これは、ディレクティブがコンパイル/リンクされる順序と、select2関数が呼び出される順序に関係しているのではないかと思います。

リンク関数の代わりにコンパイル関数またはディレクティブコントローラーを使用するなど、簡単な回避策があるのではないでしょうか。または、AngularUIselect2ディレクティブの問題である可能性があります。

問題を表示するプランカーを作成しました。

http://plnkr.co/edit/myE5wZ

だから私の質問は-カスタムAngularディレクティブ内からselect2タグをどのように機能させるのですか?

4

5 に答える 5

5

結局、2つのディレクティブをネストすることで満足できる解決策を見つけることができました。そうすれば、ロジックを親ディレクティブ内にカプセル化できます(コントローラーに流出することはありません)。

私の解決策のプランカーは、同じ問題に遭遇する可能性のある人のためにここにあります:

http://plnkr.co/edit/ZxAPF5BzkgPtn9xddCRM

于 2013-03-28T13:10:32.290 に答える
4

私は今日これに遭遇し、すぐに修正に気づきました:

PostLinking関数は、逆の順序で実行されます(最も深い孫から最も大きな祖父母へ)。

カスタムモーダルのコード(またはその子で使用するために$ scopeデータを設定するもの)をPreLinking関数内に配置します。PreLinking関数は親から子に移動し、すべてのPreLinking関数はPostLinking関数の前に実行されます。

于 2013-06-15T09:31:40.583 に答える
0

同様の問題がありました。あなたの解決策は機能しますが、私見では、ディレクティブ内でリンク関数の代わりにコントローラー関数を使用するのがさらに良い解決策だと思います。これを行うには、ネストされたディレクティブが必要です。

于 2013-05-18T17:16:34.730 に答える
0

ディレクティブでリンク関数の代わりにコントローラー関数を使用することにより、それは機能しています。例:

function myFunction() { 
  var dir = {};
  dir.scope = { myModel: '=' };
  dir.restrict = 'E';
  dir.templateUrl = 'myTemplate.html';
  dir.replace = true;
  dir.controller = function ($scope) {
    $scope.myVar = ...;
  };

  return dir;
};
于 2014-08-18T09:06:02.413 に答える
0

私にもこのエラーがあります。私の短い解決策:

<input type="hidden" 
       name="citizenship" 
       class="form-control input-sm col-sm-10" 
       style="width:500px" 
       multiple 
       ui-select2="params.options.citizenshipOptions"   
       ng-model="cvLang.content.citizenship"
       ng-repeat="a in [1]"
 />

ng-repeat = "ain[1]"は魔法のようなものです!!! コンテキストのロジックは私にはわかりませんが、これは機能しています。これが役立つかもしれませんか?

于 2014-10-11T19:38:40.167 に答える