Я пытаюсь передать пространства имен, выпущенные несколькими дочерними контроллерами того же типа. Проблема заключается в том, чтобы родителям узнать идентификатор ребенка. Рассмотрим следующий сценарий.Пространство имен событий для нескольких дочерних контроллеров в AngularJS
<div ng-controller="Parent">
<div ng-include="child1"></div>
<div ng-include="child2"></div>
... and so on, the parent decides which templates to include on the fly
</div>
<script type="text/ng-template" id="Child.html">
<div ng-controller="Child">...</div>
</script>
function Parent($scope) {
$scope.child1 = "Child.html";
$scope.child2 = "Child.html";
// The problem is setting these
$scope.childId1 = 1;
$scope.childId2 = 2;
$scope.on($scope.childId1 + ".someEvent", function() {
// Handle event from child 1
});
$scope.on($scope.childId2 + ".someEvent", function() {
// Handle event from child 2
});
}
function Child($scope) {
$scope.id = getNewId();
// Here I would like to do something like
$parent[someKey] = $scope.id;
// So that I can emit events like this
$scope.someEvent = function() {
$scope.$emit($scope.id + ".someEvent", data);
}
}
Поэтому я думаю, что проблема состоит из двух частей.
1.) Как передать someKey из родительского элемента в дочерний.
2.) Как установить someKey в родительскую область внутри дочернего элемента. Хотелось бы избежать использования $ parent. Даже не уверен, доступна ли эта переменная в контроллере?
Мой родитель не знает ребенка идентификатор. Я хочу дать каждому контроллеру уникальный идентификатор, обратившись к службе. – mozey
Мое решение находится в следующей скрипте: http://jsfiddle.net/lesouthern/5DZGv/ Просьба уточнить, если это не то, что вы описываете – koolunix
Проблема с этим решением заключается в том, что $ rootScope. $ On ('childEvent 'является обработчиком catch catch. Я хочу иметь возможность регистрировать обработчик, который прослушивает только определенный ребенок. – mozey