передача значений между контроллером и директивой

0

У меня есть контроллер, который ссылается на директиву. Директива имеет свой собственный контроллер. Моя директива имеет ng-file-upload (это другая директива сама по себе).

У меня есть некоторые поля в директиве, которые необходимо передать в виде массива на главный контроллер. Как мне это сделать?

Ура!

Теги:
angularjs-directive

2 ответа

1
Лучший ответ

Возможно, вы используете область выделения в своей директиве? Вы можете использовать = для привязки значения области видимости к области управления следующим образом:

angular.module('appName').directive('directiveName', function() {

  return {
    restrict:'E',
    scope: { boundScopeValue : '=' },
    link: function(scope) {
      scope.boundScopeValue = 'Beam me up scotty!';
    }
  }

}

Для получения дополнительной информации об изоляционной сфере и различных методах выделения, ознакомьтесь с ответами на этот большой вопрос SO: В чем разница между "@" и "=" в области действия в AngularJS?

Еще один отличный вариант - также определить функцию в вашем контроллере, а затем вызвать ее в своей директиве, когда вы хотите передавать значения и делать что-то в контроллере.

  • 0
    Я добавляю это как ответ, потому что это лучше всего соответствует моему требованию. Благодаря тонну.
1

Isolate Scope будет лучшим выбором для отображения элементов внешней области видимости внутри внутренней области директивы.

Тем не менее, пример для второго варианта приведен ниже.

<div ng-controller="MyCtrl">
    <div my-directive callback-fn="ctrlFn(arg1)"></div>
</div>


var app = angular.module('myApp',[]);

app.directive('myDirective', function() {
    return {
        scope: { someCtrlFn: '&callbackFn' },
        link: function(scope, element, attrs) {
            scope.someCtrlFn({arg1: 22});
        },
    }
});

app.controller('MyCtrl', function($scope) {
    $scope.ctrlFn = function(test) {
        console.log(test);
    }
});
  • 0
    Это правильный ответ, однако я не хочу передавать ссылку на функцию в качестве переменной области видимости, это не мое требование. Спасибо за ваш ответ. +1 за ответ, хотя :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню