Обновление ngModel из пользовательской директивы

#javascript #jquery #angularjs #typescript #angularjs-directive

#javascript #jquery #angularjs ( ангулярджс ) #машинописный текст #angularjs-директива #angularjs #typescript

Вопрос:

Я создал пользовательскую директиву для генерации и заполнения выпадающего списка из данных JSON.

Однако я хочу отреагировать на выпадающий список с помощью функции. Поэтому я хочу использовать ngChange (и ngModel). Итак, я пытаюсь начать с обновления ng-model из директивы. Функция link в директиве должна предоставить мне все, что мне нужно. НО четвертый параметр не определен, поэтому я не могу его использовать или даже скомпилировать.

Директива TS:

 module lsw{

lswApp.lswAppModule.directive("guiDropdown",
    () => ({
        restrict: "E",
        require: "ngModel",
        scope: {
            data: "=",
            ctrl: "="
        },
        link(scope, element, attrs, ctrls) {

            element.bind("change", () => {

            });

        },
        templateUrl: "../../App_Scripts/Directives/guiDropdown.html"
    }));}
  

«ctrls:{}»

Моя идея состояла в том, чтобы использовать ctrls.$setViewValue для обновления ngModel

Директивный HTML

 <div class="elements">
<select name="{{data.name}}" class="dropdown-box">
    <option ng-repeat="option in ctrl" ng-value="option">{{option}}</option>
</select>
  

Основной просмотр HTML

                     <div ng-repeat="element in HomeController.wrapper" ng-if="HomeController.trigger">
                    <div ng-switch="element.type">

                        <div ng-switch-when="dropdown">
                            <gui-dropdown data="element" ctrl="HomeController.content" ng-model="element" ng-change="HomeController.test()"></gui-dropdown>
                        </div>

                        <div ng-switch-when="textfield">
                            <gui-textfield data="element"></gui-textfield>
                        </div>

                        <div ng-switch-when="checkbox">
                            <gui-checkbox data="element"></gui-checkbox>
                        </div>

                    </div>
                </div>
  

Комментарии:

1. какую версию Angular вы используете в первую очередь? Кроме того, имя переменной области видимости ctrl для списка параметров вводит в заблуждение, я бы предложил изменить его.

2. Я использую angular 1.5.8. Также я использую переменную ctrl области видимости для передачи переменных контроллера. Однако я сомневаюсь, что это проблема.

3. Вашей директиве все равно, откуда взят список. Для повторного использования и удобочитаемости лучше как можно больше инкапсулировать. Однако на самом деле это не влияет на производительность. Что касается самого вашего вопроса, я не понимаю, почему Angular не предоставляет вам ngModelController, но для этой функциональности я бы использовал (и использовал) привязки обратного вызова, что-то вроде этого примера из документации. plnkr.co/edit/uXwghyhSvFU6JEhkG3QY?p=preview