Вопрос:

Вызов функции родительского контроллера из директивы

angularjs

3477 просмотра

1 ответ

1249 Репутация автора

Я пытаюсь вызвать функцию родительского контроллера из пользовательской директивы при выборе опции из выпадающего списка, но она продолжает выдавать ng:cpwsошибку.

Error: [ng:cpws] http://errors.angularjs.org/1.4.8/ng/cpws

HTML:

 <select chosen ng-model="selectedValue.recipientCountry" ng-options="x.Name.toLowerCase() for x in data.RecipientCountries" >
     <option value=""></option>
 </select>

JS:

uiComponentsModule.directive('chosen', [ function () {
return {
    link: function(scope, element, attrs) {
        scope.$watch(function (newVal, oldVal) {
            scope.$parent.selectRecipientCountry(x)
        })
    }
}
}])

Я пытаюсь изменить чужой код, поэтому трудно точно знать, что происходит.

Автор: Jaeeun Lee Источник Размещён: 22.08.2016 08:39

Ответы (1)


5 плюса

3165 Репутация автора

Решение

Вам нужно передать функцию в директиву от родительского контроллера, как показано ниже (я свободен от рук без тестирования, потому что вы не предоставили планку, поэтому я уверен, что вам нужно будет скорректировать код. Дело в том, что Функция передается как параметр. Если вы не знаете, как передавать переменные в директивы от родительского контроллера, вы не поймете это, поэтому сначала прочтите об этом). Обратите внимание, что я добавил 'scope' к вашей директиве - здесь вы определяете параметры для вашей директивы, которые будут переданы в новую область действия вашей директивы:

Ваша директива в HTML:

<chosen select-recepient-country = "selectRecipientCountry"></chosen>

Ваш код директивы:

uiComponentsModule.directive('chosen', [ function () {
return {
    scope: {
        selectRecipientCountry: '&selectRecipientCountry',
    },
    link: function(scope, element, attrs) {
        scope.$watch(function (newVal, oldVal) {
            scope.selectRecipientCountry(x)
        })
    }
}
}])

Объяснение см. В статье здесь: http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-3-isolate-scope-and-function-parameters

Ты ищешь:

Вариант 2. Сохранение ссылки на функцию и вызов ее

Edit: у нас есть хороший пример передачи функций здесь: AngularJS - передать функцию в директиву

Также обратите внимание, что:

    scope: {
        myFunction: '&',
    }

а также

    scope: {
        myFunction: '&myFunction',
    }

эквивалентны. Один просто явно указывает атрибут, в котором он будет искать переменную, а другой предполагает, что имя атрибута будет таким же, как и имя переменной области.

Автор: VSO Размещён: 22.08.2016 08:46
Вопросы из категории :
32x32