0

我有指令叫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. 我能够使用watchersevents

在我的指令中:

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;
 });

我不喜欢这种方法,因为我需要知道事件名称并将其添加到我的控制器中。

有没有其他解决方案可以使这项工作?

4

0 回答 0