2015-09-28 71 views
0

我创建了一个指令来显示下拉菜单(表单选择)。 但是我无法找到标记选定选项的方法。在角度选择指令中获取选定的模型

HTML表单

<div content-selects ng-model="ctrl.contentSelects.riskStatus" selection="oneWMS.riskStatusId"></div> <!-- oneWMS.riskStatusId --> 

指令

function contentSelects(){ 
    return { 
     restrict: 'AE', 
     templateUrl: '/app/Directives/contentSelects.tpl.html', 
     replace:true, 
     scope: { 
      ngModel: '=', 
      selection: '=' 
     }, 
     controller:function($scope){ 

     }, 
     link: function (scope, element, attrs) { 
      scope.selectedModel = scope.ngModel[attrs.selection]; 

      scope.isChanged = function() { 
       //console.log("changed"); 
      } 

      element.removeAttr('id'); 

     } 
    }; 
}// end function contentSelects 

这是我不明白:该指令模板

<div class="input-group"> 
<select id="{{id}}"> 
<option value="model.refId" ng-repeat="model in ngModel track by model.refId" ng-model="ngModel[selection]" >{{model.value}} *** {{selection}} *** {{ngModel[selection]}}</option> 
</select> 
</div> 

在实际的价值,{{ngModel[selection]}}给我什么我想要(目标模型行),但是当绑定到ng模型时,它不会检索任何东西ing:/

ng-model="ngModel[selection]" 

它有什么问题?使用大括号打破它当然...

+0

可你把Plunkr你的代码? – lvarayut

+0

显示您的数据样本。您是否尝试过指令外的''),所以你应该'require:“ngModel”'而不是通过范围绑定它。查看更多关于创建[自定义输入控件](https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#custom-control-example) –

+0

这是我的Plunkr http://plnkr.co/edit/ Na0JmaGZQDPtw6SeBDd4 – Underfrog

回答

2

您的问题是因为ngModel包含在选项元素。您应该将其移动到选择元素。

Demo

<div class="input-group"> 
    <select ng-model="selectedModel" > 
    <option ng-value="model" ng-repeat="model in ngModel">{{model}}   
    </option> 
    </select> 
</div> 

而且还看https://docs.angularjs.org/api/ng/directive/ngOptions

+0

这是一个很好的答案,我试过并将它应用到我的Plunkr,但它仍然是相同的结果。你能明白为什么吗? http://plnkr.co/edit/YUdXrRO0lhzxp7kIlTbs – Underfrog

+1

使用ng选项是因为这种方式不受angular 1.4支持。我已经使用角1.2。 –

+0

在我的应用程序中,'scope.selectedModel = scope.ngModel [scope.selection]; console.log(scope.selectedModel);'出来未定义。这是因为'scope.selection'是未定义的。但它的值为2! – Underfrog