我正在尝试解决一个旧的 angularjs“问题”,这实际上是预期的行为:“将 ng-model 添加到预定义的 Select 元素会添加未定义的选项”(https://github.com/angular/angular.js/issues/1019) .
我正在使用 ng 1.4.9、ui-bootstrap、ui-router 并尝试将“bootstrap-formhelpers-states”用于状态选择列表。我在项目中确实有 jQuery 以支持 FullCalendar,我有一个 ng 指令,但我试图不将它用于其他任何事情。
我可以让 States 列表正常工作,而不必包含任何引导 js,但是我没有让 Model 的绑定在 init 上正常工作,这是许多人遇到的问题。
从这个问题(Why angularJS´s ui-view breaks Bootstrap Formhelper)我得到了一个针对国家的指令并针对国家进行了调整:
angular.module("myApp").directive('statepicker', function ($parse) {
return {
restrict: 'A', // It is an attribute
require: '?ngModel', // It uses ng-model binding
scope: {
ngModel: '='
},
link: function (scope, elem, attrs, ctrl) {
// Add the required classes
elem.addClass('bfh-states');
// First we initialize the selec with the desired options
elem.select({
filter: (elem.attr('data-filter') == 'true') ? true : false
}).on('change', function() {
// Listen for the change event and update the bound model
return scope.$apply(function () {
return scope.ngModel = elem.val();
});
});
scope.$watch('ngModel', function (newVal, oldVal) {
if (newVal != oldVal) {
elem.val(newVal);
});
// Initialize the states with the desired options
return elem.bfhstates({
flags: (elem.attr('data-flags') == 'true') ? true : false,
country: 'US',
state: scope.ngModel || 'CA',
blank: false
});
}
};
});
因此,如果我没有在“select”元素中添加“ng-model”,它会使用指令选项(CA)中的值初始化 OK,但是使用模型绑定,它不会;与它不是列表中的有效选项有关(但它是)。问题是当我编辑一个退出地址时,我希望从变量模型值设置列表,但是当通过初始指令选项设置时,它是不可更改的。
HTML:
<select statepicker id="stateList" name="state" class="form-control" ng-model="state" ng-init="initState()"></select>
<button ng-click="setState('NY')">Set State</button>
通过模型绑定,我可以在加载后使用按钮和观察器来设置值,但尝试通过“ng-init”这样做是行不通的。
控制器功能:
$scope.state = 'IL';
$scope.initState = function() {
$scope.setState('AZ');
};
$scope.setState = function(val) {
$scope.state = val;
};