AngularJS - получение значения атрибута из директивы

0

Хорошо, поэтому у меня есть директива, которая берет атрибуты и читает ее (и записывает ее).

Вот плункер: http://embed.plnkr.co/IkKPLahPc9yqeHWEQUG3/

Я думаю, это из-за контроллера: ctrl внутри main-directive.js, у которого ничего нет, тогда как фактическое действие происходит внутри изолированного контроллера контроллера директивы.

Вот основная директива.js:

var app = angular.module('testapp.directive.main', ['main']);


app.directive('myCustomer', function() {

  var controller = ['$scope', function($scope) {

    $scope.dan = { 'name': 'Dan', 'nationality': 'ESP' };
    // scope from here obv...

  }];

  var template = 'Getting attribute value of =getInfo... {{getInfo.name}} from {{getInfo.nationality}}';

  return {
    restrict: 'E',
    controller: controller,
    scope: {
      getInfo: "=info"
    },
    template: template
  };
});

app.controller('ctrl', function($scope) {

})

и вот мой шаблон:

<div ng-controller="ctrl">
    <my-customer info="dan">
    </my-customer>
</div>

Почему моя директива не читает атрибут информации?

Теги:
angular-directive

2 ответа

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

Вы правы, объект $ scope.dan должен находиться в области "ctrl controller" и вытащить из области действия контроллера директив.

app.controller('ctrl', function($scope) {
    $scope.dan = { 'name': 'Dan', 'nationality': 'ESP' };
})

Это применимо к методу двусторонней привязки данных, который вы настроили для getInfo, используемого "= info",

  • 0
    Это правильный ответ. Я даже не уловил, что это было в области действия контроллера
  • 0
    Я обычно пишу методы контроллера непосредственно в объекте return {} для ясности.
Показать ещё 5 комментариев
0

То, как это кодируется, ожидает, что контроллер ctrl получит свойство "dan" в своей области. Если вы просто передаете строку "дан", вы хотите изменить свою директиву на использование @вместо =

    app.directive('myCustomer', function () {

        var controller = ['$scope', function ($scope) {

            $scope.dan = {'name': 'Dan', 'nationality': 'ESP'};
            // scope from here obv...

        }];

        var template = 'Getting attribute value of =getInfo... {{getInfo.name}} from {{getInfo.nationality}}';

        return {
            restrict: 'E',
            controller: controller,
            scope: {
                getInfo: "@info" //<--NOTE THE CHANGE HERE
            },
            template: template
        };
    });     

Ещё вопросы

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