javascript - ngOptions 在自定义指令中应用了两次

标签 javascript angularjs angularjs-directive

我正在创建一个指令,用自定义的 select 标签替换普通的 select 标签:

angular.module('myModule').directive('mySelect', function() {
 return {
   restrict: 'AE',
   require: 'ngModel',
   templateUrl: 'mySelect.html'
   replace: true,
   scope: true,
   controller: ['$scope', function($scope) { $scope.options = [1,2,3,4,5] }],
   link: function(scope, element, attrs, ctrl) {
      // No updates to scope here
   }
 }
});

模板看起来像:

<select ng-model="value" ng-options="(x | sprintf:'%02d') for x in options"></select>

由于某些奇怪的原因,ng-options 创建的选项被应用了两次。生成的 HTML 如下所示:

<select my-select ng-options="(x | sprintf:'%02d') for x in options" class="...">
  <option value="?" selected="selected"></option>
  <option value="0">01</option>
  <option value="1">02</option>
  <option value="2">03</option>
  <option value="3">04</option>
  <option value="4">05</option>
  <option value="?" selected="selected"></option>
  <option value="0">01</option>
  <option value="1">02</option>
  <option value="2">03</option>
  <option value="3">04</option>
  <option value="4">05</option>
</select>

有人知道这是怎么回事吗?

最佳答案

您应该使用 div 而不是 <select my-select></select>像这样

<div my-select></div>

指令mySelect返回另一个 select指令所以你会得到错误 Error: Multiple directives [select, select]因为 HTML 将呈现为

<select ng-options="x for x in options" ng-model="value" my-select=""></select>

Demo

关于javascript - ngOptions 在自定义指令中应用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18219138/

相关文章:

javascript - Axios Instance 类中的取消请求

javascript - AngularJS 过滤器和 ng-model 如何在 JavaScript 上下文中工作?

javascript - 是否可以渲染具有隔离范围的 Angular Directive(指令)模板?

javascript - 如何在 Angular 中通过 $resource 从自定义指令发送输入值?

javascript - Web Audio - 如何立即更改所有声音的播放速率?

javascript - HTML 表格不会删除填充

javascript - deviceTheme.js 和 dojo.js 无法在 Chrome 中加载

angularjs - sails.js 中实时刷新网页

javascript - 如何使用 AngularJS 在 Angular 过滤器中按 2 列进行分组

javascript - 将常量注入(inject)到 Angular js中的 Controller (模式弹出问题)