Ok dieser Code ruft meine $ emit Funktion mehr als einmal auf. Ich möchte es nur einmal anrufen.
Ich habe einen Controller und zwei Direktiven. Zusammenfassend möchte ich, dass eine Anweisung eine Nachricht an den Controller sendet und der Controller eine Nachricht an die andere Direktive sendet. Brauche Hilfe.
Aus dem newby angularJS Coder.
enter code here
app.controller("myCtrl", ['$scope', '$http', '$routeParams', 'myCounter', '$rootScope', function ($scope, $http, $routeParams, myCounter, $rootScope) {
///////////////////////////////////////////
Listener = $scope.$on('eventEmit', function (event, args) {
event.stopPropagation();
console.log("hi from controller");
// broadcast down to directives
childPosition = 0;
$scope.$broadcast('eventBroadcast', childPosition);
});
// destroy listener
$scope.$on('$destroy', Listener);
}]);
„Seite“ Richtlinie Nur 1 „Seite“ kann zu einem Zeitpunkt sichtbar. Eine Seite kann im Inneren einer anderen Seite nicht existieren Welche Seite sichtbar ist, wird
enter code here
app.directive('myPage', function (myCounter) {
return {
template: '<div ng-show = "showContent" >content {{counter}}</div>',
restrict: 'EA',
controller: 'myCtrl',
scope: {
nextPage: '&',
showContent:'<'
},
link: function (scope, element, attr) {
///////////////////////////////////////////
scope.$on('eventBroadcast', function (event, args) {
console.log("hi from directive");
});
}
};
})
„Ereignis“ Richtlinie durch Befehle an die Steuerung bestimmt werden auf die Ereignisse seiner Mutterelement hören und Befehle senden über, wenn die Ereignis, auf das es wartet, passiert. 2 Attribute Typ - Auf welches Ereignis sollte geachtet werden (wie "Klick") Aktion - Was soll passieren, wenn das Ereignis eintritt? die Veranstaltung Richtlinie soll zum Beispiel eine Nachricht senden, um die Steuerung zu sagen, die Nächste Funktion aufzurufen
enter code here
app.directive('myEvent',['$rootScope', function (myCounter,$rootScope) {
return {
restrict: 'EA',
controller: 'myCtrl',
template: '<input type = "button" ng-click = "handlePrev()" ng-
transclude>Prev</input>' +
'<input type = "button" ng-click = "handleNext()" ng-
transclude>Next</input>',
transclude:true,
link: function ($scope, element, attrs) {
$scope.handleNext = function() {
$scope.functionValue = "nextPage";
pageController($scope.functionValue, $scope);
console.log("Clicked next", $scope.functionValue);
}
$scope.handlePrev = function() {
$scope.functionValue = "prevPage";
pageController($scope.functionValue, $scope);
}
}
};
}])
pageController = function (string, $scope) {
myEmitter = $scope.$emit('eventEmit', string);
$scope.$emit('$destroy', myEmitter);
}
Ich fand heraus, dass meine Anweisung meinen Controller anrief. Ich habe gerade den Label Controller entfernt: von meiner Direktive. Es funktioniert dank. –