Javascript 为什么';这个角度选择包装器指令不起作用吗?

Javascript 为什么';这个角度选择包装器指令不起作用吗?,javascript,angularjs,angularjs-directive,html-select,Javascript,Angularjs,Angularjs Directive,Html Select,我正试图制定一个指令,用硬编码列表环绕select var-app=angular.module('dirApp',[]); app.directive('dir',[function(){ 返回{ 限制:'E', 模板:“”, controllerAs:'vm', 链接:功能(范围){ scope.arr=[“a”,“b”]; } }; }]); 您必须将数据放入控制器中,并在模板中添加ngModel 指令 (function(){ function dir() { ret

我正试图制定一个指令,用硬编码列表环绕
select

var-app=angular.module('dirApp',[]);
app.directive('dir',[function(){
返回{
限制:'E',
模板:“”,
controllerAs:'vm',
链接:功能(范围){
scope.arr=[“a”,“b”];
}
};
}]);

您必须将数据放入控制器中,并在模板中添加ngModel

指令

(function(){

  function dir() {
      return{
          restrict: 'E',
          template: "<select ng-model='vm.x' ng-options='x for x in vm.arr'></select>",
          controllerAs: 'vm',
          controller: function() {
            var vm = this;
            vm.arr = ["a", "b"];
            vm.x = vm.arr[0]
          }
        };
  }

angular
  .module('app')
  .directive('dir', dir);


})();
(函数(){
函数dir(){
返回{
限制:'E',
模板:“”,
controllerAs:'vm',
控制器:函数(){
var vm=这个;
vm.arr=[“a”,“b”];
vm.x=vm.arr[0]
}
};
}
有棱角的
.module('应用程序')
.指令(“dir”,dir);
})();

您忘记在选择中指定
ng model=“currentValue”
;没有它,选项将不会初始化。 此外,如果要使用controllerAs引用控制器,可能需要定义控制器:

controller: function () {
        this.arr = ["a", "b"];
    },
或者,您可以将数组直接放在指令的范围内。 以下是您的指令的一些更新:

myApp.directive('dir', function () {
return {
    restrict: 'E',
    template: "<select ng-model='crrValue' ng-options='x for x in vm.arr'></select><div ng-repeat='item in arr'>{{item}}</div>",
    controller: function () {
        this.arr = ["a", "b"];
    },
    controllerAs: 'vm',
    link: function (scope) {
        scope.arr = ["c", "d"]
    }
};
});
myApp.directive('dir',function(){
返回{
限制:'E',
模板:“{item}}”,
控制器:函数(){
this.arr=[“a”,“b”];
},
controllerAs:'vm',
链接:功能(范围){
scope.arr=[“c”,“d”]
}
};
});
您将注意到div和select之间的差异


希望这对任何人都有帮助

控制器
中它需要什么而不是链接?
link
中的
scope
对象本质上不是一回事吗?
link
函数通常用于注册DOM侦听器以及更新DOM。当另一个指令需要与此指令交互时,例如
ngOptions
,必须使用
控制器。此外,在您的示例中,变量设置为
this
,而不是
$scope
。这里您使用
this
而不是
scope
。欲了解更多信息,请点击此处