Angular UI select2,标签不在自定义指令内

时间:2013-03-26 09:23:35

标签: angularjs angularjs-directive angular-ui jquery-select2

使用Angular UI Select2指令,在输入字段上定义标记。如果输入本身在自定义指令中,则它未正确初始化并且控制台出错:

query function not defined for Select2 tagging

我怀疑这可能与指令编译/链接的顺序与调用select 2函数时的顺序有关。

也许有一个简单的解决方法,可能使用编译功能或指令控制器而不是链接功能?或者这可能是Angular UI select2指令的一个问题。

我做了一个显示问题的plunker:

http://plnkr.co/edit/myE5wZ

所以我的问题是 - 如何从自定义Angular指令中获取select2标签?

5 个答案:

答案 0 :(得分:5)

最后,我设法找到了一个解决方案,我很高兴涉及嵌套两个指令,这样逻辑可以封装在父指令中(不会泄漏到控制器中)。

对于任何可能遇到同样问题的人来说,我的解决方案就在这里:

http://plnkr.co/edit/ZxAPF5BzkgPtn9xddCRM

答案 1 :(得分:4)

我今天刚刚遇到这个并立即意识到修复:

PostLinking函数以相反的顺序执行(最深的孙子到最大的祖父母)。

将您的自定义模式代码(或任何设置$ scope数据的内容用于其子代)放在 PreLinking 函数中。 PreLinking 函数从父级转换为子级,所有PreLinking函数在PostLinking函数之前执行。

答案 2 :(得分:0)

我有类似的问题。您的解决方案有效,但我认为更好的解决方案是使用控制器功能而不是指令内的链接功能。这样做你需要嵌套指令。

答案 3 :(得分: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;
};

答案 4 :(得分: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 =“[1]中的a”是一个神奇的东西!!! 我不清楚上下文的逻辑,但这是有效的。可能这有帮助吗?