Я изучаю 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, но оно не может работать!
Вот пример, где все они разные:
<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: "="
.
li
обернут в контроллере? Директива получает страну, которая была бы заполнена родительским контроллером элемента_ - :
атрибуты in преобразуются в camelCase как dirCountry в угловых.