假设我在我的应用程序中为各个国家/地区使用了相当多的下拉选项(也称为组合框)。 为了避免一遍又一遍地重复相同的代码,我想为此创建一个指令。
但是:使用以下指令并不能满足我的所有期望(见下文),而复制粘贴模板确实符合我的所有期望..
app.directive('countrydropdown', function($compile) {
return {
restrict: 'E', //attribute or element
scope: {
countryUri: '='
},
templateUrl: 'countrydropdown.html',
controller : function($scope) {
$scope.listItems = [
{name: 'Afghanistan', code: 'AF'},
{name: 'Åland Islands', code: 'AX'},
{name: 'Albania', code: 'AL'},
];
我的模板是:
<div>
model (inside directive): {{countryUri}}
<ui-select ng-model="countryUri" theme="selectize" >
<ui-select-match placeholder="Select or search a country in the list...">{{$select.selected.name}}</ui-select-match>
<ui-select-choices repeat="'/api/countries/'+country.code as country in listItems | filter: $select.search">
<span ng-bind-html="country.name | highlight: $select.search"></span>
<small ng-bind-html="country.code | highlight: $select.search"></small>
</ui-select-choices>
</ui-select>
</div>
我期望它做什么:
我一定是做错了,但我找不到。 请看这个插件中的例子:http://plnkr.co/edit/oF1R0F1udfiRulx5NvLO?p=preview
请注意,在第一个组合框中进行更改,似乎一切正常。 (第二次组合更新很好) 一旦我在第二个选项上做出选择,绑定似乎就会被打破&#39;
有关此的任何提示吗?
答案 0 :(得分:0)
我修改了您的代码,使<ui-select>
的对象字段为 ng-model ,而不是原语。在父/子范围情况下,对原语的双向数据绑定可能会出现问题:https://github.com/angular/angular.js/wiki/Understanding-Scopes
所以这是主要的变化:
<ui-select ng-model="countryData.selectedCountry"></ui-select>
Plunkr:http://plnkr.co/edit/wCiUoI4aeYPs01FMIVwO
修改强> 如果你不想硬编码&#34; selectedCountry&#34;在您的指令中,您可以执行以下操作:
<country-dropdown country-data="mydata" field="selectedCountry"></country-dropdown>
您的指令模板如下所示:
<ui-select ng-model="countryData[field]">
...
</ui-select>