Это мой код прямо сейчас:Получить щелкнул нг-повторить пункт в родительском контроллере
var app = angular.module("MyApp", []);
app.controller("ctrl", function($scope) {
$scope.slides = [{
title: "Slide 1"
},{
title: "Slide 2"
}];
$scope.clicked = {title: "undefined slide"};
});
app.directive("scroller", function() {
return {
template: "<div slide ng-click='click()' ng-repeat='slide in slides'></div>"
};
});
app.directive("slide", function() {
return {
template: "{{slide.title}}",
controller: function($scope) {
// controller
$scope.click = function() {
// Tell parent I was clicked
}
},
link: function(scope, element, attrs) {
// link
}
};
});
Я хочу clicked
в главном контроллере быть slide
, который щелкнул.
$scope.clicked = $scope.slide
явно не работает из-за рамки повторения.
двухсторонняя привязка данных не работает, потому что это создаст Seconde область для элемента и, следовательно, шаблон из slide
директивы бы перестать работать.
Я знаю, что
$scope.$parent.clicked = $scope.slide;
будет работать, но я хотел бы попросить лучшее решение, потому что я не хотел получить доступ к родительской области, как это.
Может кто-нибудь, пожалуйста, помогите мне с этим? Может быть, трансляция щелкнутого элемента? Спасибо заранее.
Итак, мне нужно было бы переместить обработчик кликов на функцию ссылки, верно? – gerric
Ну, вам не нужно его перемещать. Вы можете хранить ссылку на родительском контроллере в области вашего контроллера слайдов или даже добавлять ее к самому дочернему контроллеру (для этого вам нужно указать массив требуемых контроллеров. Они будут предоставлены вашей функции ссылок в виде массива. имеют доступ как к контроллерам слайда, так и к ctrl в функции ссылок и связывают их по своему желанию). –
Я понимаю, что вы сделали, но по какой-то причине я получаю исключение «Нет контроллера» или просто нет вывода в зависимости от того, использую ли я 'ограничение' в директиве скроллеров. – gerric