ui-router: modal öffnen und pass übergeordneten scope-Parameter
Ich bin mit diesem FAQ-Eintrag zum öffnen eines modalen Dialoges in einen kindlichen Zustand von einem bestimmten Zustand: https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-open-a-dialogmodal-at-a-certain-state
Mein code ist unten. Wenn ich öffnen Sie ein modales Dialogfeld, die ich brauche, um Zugang zu den Eigenschaften des übergeordneten staatlichen Rahmen. Ist das möglich?
plnkr: http://plnkr.co/edit/knY87n
.state('edit', {
url: '/{id:[0-9a-f]+}',
views: {
'@': {
templateUrl: 'views/edit.html',
controller: 'editContr'
}
}
})
.state('edit.item', {
url: "/item/new",
onEnter: function($stateParams, $state, $modal) {
$modal.open({
controller: 'itemEditContr',
templateUrl: 'views/edit-item.html',
}).result.then(function (item) {
//
//here I need to insert item into the items
//seen by my parent state. how?
//
$state.go('^');
}, function () {
$state.go('^');
});
}
});
function editContr($scope) {
$scope.items = [{name: 'a'}, {name: 'b'}, {name: 'c'}];
}
function itemEditContr($scope, $modalInstance) {
$scope.submit = function () {
$modalInstance.close($scope.item);
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
$scope.item = {name: 'test'};
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie planen, zu aktualisieren, params die Eltern setzen? Sie sollten in der Lage sein, um die übergeordneten Staat mit
Z.B. der name des übergeordneten Staates, wird $Status.$aktuelle.Eltern.name
EDIT: Aktualisierung seit der OP wollte Zugriff auf den Umfang und nicht den übergeordneten Staat.
Können Sie emittieren ein Ereignis, von dem Kind, und erfassen Sie es in der Eltern.
Ungetestete code:
Im Elternteil:
In der Kind-Zustand:
$rootScope
huh? 🙂then
Funktion, die aufgerufen wird durch das Versprechen zurück durch die$modal.open
.scope
, und es ist nicht ein Kind von den übergeordneten staatlichen Bereich. Ich habe Kommentare über das, was ich brauche. vielen Dank für Eure Hilfe.$modal
aber ich sehe nicht, wie ich das tun kann. danke. Ich weiß, über eine service-Injektion, ich war versuchen zu finden, einen direkten Weg, es zu tun. Dein Vorschlag mit dem Bereich Veranstaltungen arbeitet (ich muss nur einen Hörer auf$rootScope
).$rootScope
, und es wäre schlecht, die Praxis in diesem Fall zu tun.$modal.open
@see stackoverflow.com/a/24726331/595152lange Geschichte kurz, ja es ist. Lesen Sie die angularjs-Entwickler Leitfaden für Bereiche, ist eigentlich einer der Ihren, hilfreich und sehr gut dokumentierten Stücke: http://docs.angularjs.org/guide/scope
Abgesehen davon, dass scope in angular ist nichts anderes als ein Rahmen mit jedem javascript-Objekt.
Haben Sie ein oder zwei Dinge, die man nicht tut, richtig. Für, vorbei
item
in Ihrem onEnter Funktion wird nicht helfen, es sei denn, Sie greifen etwas aus der url als identifier, oder resloving einige Daten, die Sie injizieren in die Staaten controller. Sie versuchen zu tun, die letztere, aber Sie sind nicht nichts auflösen, so dass Sie immerundefined
auf Element.Einen trick, die Sie verwenden können, um eine truthy-Wert in der Ihrer Eltern, und darauf zugreifen.
Dann, wenn Sie öffnen Sie Ihren modalen Aufruf
$scope.getItem()
im controller statt der Injektion Element in der Steuerung direktZugriff auf den übergeordneten scope ist nichts besonderes, so stellen Sie sicher, dass Sie einen Wert ein, und nicht überschreiben. so können Sie auf
$scope.items
aus der untergeordneten Steuerung durch Zuweisung an eine variable, oder Sie können schieben Sie es neue Werte, aber nie set, oder erstellen Sie eine neue lokale Objekte Objekt auf dem untergeordneten Bereich statt.$scope
ich, dass ich initemEditContr
ist ein Geschwister, ein Kind, das von der$scope
gesehen ineditContr
... ich gues ich verwenden könnte$scope.$$prevSibling
aber es sieht zerbrechlich aus.child
Umfang und nicht Geschwister Umfang. mititem.edit
garantiert, dass der Umfang, innerhalbitemEditContr
ist ein KindeditContr
. dazu gibts, dass bedeutet, dass die angular-ui-router ist auf der Suche nach einemui-view
Richtlinie in Ihrer Vorlage für Ihreedit
Zustand, um zu sehen. Dies kann, warum Sie denken, dass Sie Geschwister sind, aber Sie sind nicht. die Definition der Ansicht in der Art und Weise haben Sie in deredit
Zustand ist nicht anders als nur mit Vorlage innerhalb der main-Status-config statt der Schachtelung in ein view-Objekt.then
Funktion, die aufgerufen wird durch das Versprechen zurück durch die$modal.open
. dies ist nicht in den controller....
und das bisschen, bevor es ist der name einer bereits bestehenden Zustand, dann definieren Sie ein Kind Zustand. und mit@
innerhalb der Ansichten config nur Ziele jede ui-view-innen Bearbeiten die Bereiche übergeordnete Sicht, das ist Standardverhalten. Sie müssen definiert ein Kind Zustand.scope
, und es ist nicht ein Kind von den übergeordneten staatlichen Bereich. Ich habe Kommentare über das, was ich brauche. vielen Dank für Eure Hilfe.Kämpfte ich mit dieser auch gefunden und eine alternative Lösung. Anstelle der Verwendung der onEnter Funktion, die Sie verwenden können, eine Steuerung mit einer sehr einfachen Ansicht aus, der eine Funktion aufruft zum öffnen des modalen. Habe ich eine
In der Beispiel-controller ein setzen der openModal() Funktion zum öffnen des modalen, wo Sie haben einen Geltungsbereich.