如何使用 angularjs 预填充 select 选项自定义指令

How to pre-populate select options custom directive using angularjs

我是创建指令的新手,该指令将在我的整个申请过程中为我提供帮助。我基本上想创建一个预填充选项的自包含 select 元素指令。对于最终结果,我想做的就是将 ngModel 绑定到它以进行设置和检索。我的 html 标记如下所示:

<div family-drop-down 
 humans-only="true" 
 ng-model="vm.selectedFamilyMember"></div>

这里是 angular 代码:

(function(){
'use strict';

 angular.module('app', [])
  .controller('familyController', function(){
     var self = this;

     self.title = '';
     self.selectedFamilyMember = {};

     function init(){
        self.title = 'drop down example';
     }

     init();
  })
  .directive('familyDropDown', function(){
     function helperController(){
        var self = this;

        self.family = [];

        self.init = function() {
            self.family = [
                {id: 1, firstName: 'John', lastName: 'Doe', human: true},
                {id: 2, firstName: 'Jane', lastName: 'Doe', human: true},
                {id: 3, firstName: 'Baby', lastName: 'Doe', human: true},
                {id: 4, firstName: 'Dog', lastName: 'Doe', human: false}
            ];
        };
    }

    return {
      restrict: 'AE',
      replace: true,
      required: '^ngModel',
      scope: {
        humansOnly: '@',
        ngModel: '='
      },
      controller : helperController,
      controllerAs: 'vm',
      template: [
        '<select ', 
        'id = "ddlFamily" ',
        'name = "family" ',
        'class = "form-control" ',
        'ng-options = "(fam.firstName + " " + fam.lastName + " (" + fam.id + ")") for fam in vm.family" ',
        'required ',
        'title= "select family member in drop-down-list"> ',
        '<option value="">select member</value> ',
        '</select>'
        ].join(''),
      link: function(scope, element, attrs, ctrl){
        attrs('ng-model', scope.ngModel);
        ctrl.init();
      }
     };
  });
})();

笨蛋:http://plnkr.co/edit/XfLRD8pzBISvQgV1mRqd?p=preview

提前感谢您的宝贵时间和帮助。

ngOption 属性中 " 的引号转义不正确。正确的应该是:

template: [
    '<select ',
        'name="family" ',
        'class="form-control" ',
        'ng-options="(fam.firstName + \' \' + fam.lastName + \' (\' + fam.id + \')\') for fam in vm.family" ',
        'required ',
        'title= "select family member in drop-down-list"> ',
        '<option value="">select member</value> ',
    '</select>'
].join(''),

演示: http://plnkr.co/edit/RLGc9dAElD1wpLN8uPm0?p=preview

另请注意,它是 require 而不是 required。并且由于您输入错误 - 您可以将它们全部删除,在您的情况下不需要它(您使用的是范围 ngModel: '=' 绑定)。