Запутаться в области видимости в angularJS

0

Я изучаю angulaJS видео Введение в Angular.js в 50 примерах, это потрясающе, но я смущен с № 46. Мы, скажем, хотим получить некоторую информацию нации от json файла и отобразить ее, и у нас есть определение директивы:

countryApp.directive('country', function () {
    return {
        scope: {
            country: '=country'
        },
        restrict: 'A',
        templateUrl: 'country.html'
    };
});

и мы вызываем страну директивы в некоторых html:

<ul>
    <li ng-repeat="country in countries" country="country"></li>
</ul>

Мой вопрос: каков точный смысл 4 разных существительных "страна"? первые две в области действия (страна: '= страна'), последние два в html (страна = "страна"). Я понимаю, что первое - это просто определение переменной в директиве, поэтому оно должно быть изменено на другое имя, такое как dir_country, но оно не может работать!

  • 0
    Я подозреваю, что элемент li обернут в контроллере? Директива получает страну, которая была бы заполнена родительским контроллером элемента
  • 0
    _ - : атрибуты in преобразуются в camelCase как dirCountry в угловых.
Теги:
angularjs-scope
angularjs-directive

1 ответ

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

Вот пример, где все они разные:

<li ng-repeat="country in countries" country-dir="country">
.directive("countryDir", function(){
  return {
    scope: {
      countryObj: "=countryDir"
    },
    template: "<span>{{countryObj.name}}</span>",
    link: function(scope){
      console.log(scope.countryObj); // is the bound country object
    }
  };
});

Вот:

  • country - это внутренняя переменная области элемента в разных countries
  • country-dir - это директива (которая имеет нормализованную форму countryDir).
  • "=countryDir" является двусторонней привязкой к атрибуту country-dir (который, оказывается, является самой директивой, но не обязательно)
  • countryObj - это свойство внутренней изолированной области, которое привязано к объекту country, если вы хотите, чтобы внутреннее имя отличалось от атрибута. В противном случае его можно было бы сократить до countryDir: "=".
  • 0
    большое спасибо . ключевой момент - третий. переменная области видимости countryObj может принимать любое значение, переданное из любого атрибута, но в данном случае это была сама директива. и директива также оказалась с тем же именем, что и переменная области видимости в исходном примере. после того как я изменил имя переменной области, я забыл изменить имя в html-шаблоне с именем templateUrl, чтобы оно не работало.
  • 0
    @eita, не уверен, что понимаю ваш вопрос / проблему
Показать ещё 1 комментарий

Ещё вопросы

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