Я пытаюсь добавить новую привязку к существующему компоненту AngularJS, который должен принимать значение типа comprehension_expression
, как описано в Справочник по API директивы ng-options.
Пожалуйста, проверьте код внизу, чтобы понять ситуацию. Обратите внимание, что верхний элемент управления <select>
поступает через компонент с именем selectField
. Он не показывает никаких вариантов выбора. Нижний элемент управления добавляется непосредственно в index.html
и работает правильно.
Я был бы признателен, если бы кто-нибудь сказал мне, есть ли ошибка в моем скрипте, какие-либо альтернативные подходы к передаче значения атрибута ng-options
в шаблон или дайте мне знать, что компонент или директива не могут иметь такие привязки.
angular.module('myApp', [])
.controller('MainController', function MainController() {
this.colors = ['red', 'blue', 'green'];
this.myColor = this.colors[1]; // blue
}).component('selectField', {
template: `
<select ng-model="$ctrl.inputModel"
ng-options="{{::$ctrl.inputOptionsExpression}}">
</select>
Selected: {{$ctrl.inputModel}}</span>
`,
bindings: {
inputModel: '=',
inputOptionsExpression: '@'
}
});
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="MainController as vm">
<div>
<select-field input-model="vm.myColor"
input-options-expression="color for color in vm.colors">
</select-field>
</div>
<div>
<select ng-model="vm.myColor"
ng-options="color for color in vm.colors">
</select>
Selected: {{vm.myColor}}
</div>
</div>
</body>
</html>