我有指令叫herseft。
<div>
<div class="c-select u-margin-b-15" ng-if="!vm.areLastOptionsToSelect">
<select class="form-control"
ng-model="vm.selectedOption"
ng-options="option.text for option in vm.options track by option.value">
</select>
</div>
<my-component ng-if="vm.hasSelectedOptionChildren"
i-options="vm.selectedOption.childNodes"
i-model="vm.selectedOption"></my-component>
</div>
输入是集合,如:
[
{
"prop1":1,
"childNodes":[
{
"prop1":11,
"childNodes":[
]
},
{
"prop1":12,
"childNodes":[
]
}
]
},
{
"prop1":2,
"childNodes":[
{
"prop1":21,
"childNodes":[
]
},
{
"prop1":22,
"childNodes":[
]
},
{
"prop1":23,
"childNodes":[
]
}
]
}
]
我从控制器视图中调用我的指令
<my-component i-options="options" i-model="form.selectedConfig"></my-component>
我想收到最新的可能选定值form.selectedConfig
。我的意思是-对我来说最新的是没有childNodes
值并且当前选择的值是期望值时的值。如果有一些childNodes
,那么用户应该从childNodes
等中选择一些东西。
问题 - 我无法仅使用ng-model
. 我能够使用watchers
和events
在我的指令中:
this.$scope.$watch(() => { return this.selectedOption; }, () => {
if (this.selectedOption && !this.selectedOption.hasChildNodes) {
this.$scope.$emit('$myEvent', this.selectedOption);
}
else {
this.$scope.$emit('$myEvent', null);
}
}, true);
在控制器中:
$scope.$on('$myEvent', (event, option) => {
$scope.form.selectedConfig = option;
});
我不喜欢这种方法,因为我需要知道事件名称并将其添加到我的控制器中。
有没有其他解决方案可以使这项工作?