我对angular(1)颇为陌生,并且遇到了问题。我需要在我的应用中使用自定义年份选择器,这个选择器出现在几个地方。原始代码是在Angular中自定义选择不显示ngModel的值
HTML
<select id="yearpicker" ng-model="vm.film.release" required="true" class="form-control">
<option disabled="" selected="" value="">Choose one... </option>
<option disabled="">___________________</option>
<option value="Unknown">Release Year Unknown</option>
<option disabled="">___________________ </option>
</select>
JS
<script>
for (i = new Date().getFullYear(); i > 1900; i--)
{
$('#yearpicker').append($('<option />').val(i).html(i));
};
</script>
这给了我一个很好的下拉与1900年所有年份的提出和领域多年,其中一年是未知的。但是,代码在页面上,这不是很好,这意味着我必须加载jquery才能发现很多错误,也意味着代码在几个地方重复。我把代码拉出来,放在一个指令中,所以我不必重复它,所以我可以先加载角度并摆脱错误。我不喜欢这样
指令JS
angular
.module('myapp')
.directive('customYearpicker', customYearpicker);
function customYearpicker() {
return {
restrict: 'AE',
scope: {
bindModel: '=ngModel'
},
controller: function() {
for (i = new Date().getFullYear(); i >= 1900; i--) {
$('#yearpicker').append($('<option />').val(i).html(i));
};
},
templateUrl: '/common/directives/customYearpicker/customYearpicker.template.html'
};
};
HTML模板
<select id="yearpicker" ng-model="bindModel" class="form-control">
<option value="">Choose one... </option>
<option disabled="">___________________</option>
<option value="Unknown">Release Year Unknown</option>
<option disabled="">___________________ </option>
</select>
,我叫它像这样
<custom-yearpicker name="release" ng-model="vm.record.release" required="true"></custom-yearpicker>
这工作得很好无处不在,除非我想要编辑记录,现在选择不再由'vm.record.release'中的值填充,而只是空白。 'vm.record.release'具有正确的值,它不会显示在我的下拉菜单中,但是与其他所有实例一样,它们都不是“选择一个...”。除此之外,年份选手工作正常,但这需要修复。
如果任何人都可以指出我做出的(很可能)显而易见的失误,或者指出我正确的方向,如果我这样做是错误的,那将是非常感谢。
谢谢。
UPDATE
所以被建议使用NG选项后,我现在已经更新了我的指令是:
angular
.module('myapp')
.directive('customYearpicker', customYearpicker);
function customYearpicker() {
return {
restrict: 'AE',
scope: {
bindModel: '=ngModel'
},
controller: function ($scope) {
$scope.selectOptions = [
{ name: '', text: 'Choose one... ' },
{ name: '', text: '___________________' },
{ name: 'Unknown', text: 'Release Year Unknown' },
{ name: '', text: '___________________' },
];
for (i = new Date().getFullYear(); i >= 1900; i--) {
// $('#yearpicker').append($('<option />').val(i).html(i));
var newOpt = { name: i, text: i};
$scope.selectOptions.push(newOpt);
};
console.log($scope.selectOptions);
return $scope.selectOptions;
},
templateUrl: "/common/directives/customYearpicker/customYearpicker.template.html"
};
};
和HTML模板这样:
<select id="yearpicker" ng-model="bindModel" ng-options="option.name as option.text for option in selectOptions" class="form-control"> </select>
和我这样称呼它:
<custom-yearpicker name="release" ng-model="vm.record.release" required="true"></custom-yearpicker>
问题是即使它和以前一样工作,我禁用的选项不再被禁用,yearpicker仍然没有显示vm.record.release的值。如果我从选择器中选择一个值,它会被编辑控制器拾取而没有任何问题,但由于某种原因,它并未在选择器中被选中。仍在寻找建议。
你可以共享编辑记录的代码吗? –