Für eine Teilansicht möchte ich einige JavaScript-Sachen tun, die ich normalerweise mit $(document).ready(function() {...})
, z. binden Sie die Hörer an Elemente. Ich weiß, dass dies nicht für AngularJS und Teilansichten funktioniert, die in die "root" -Ansicht geladen werden.
Also habe ich einen Listener zum Controller hinzugefügt, der auf das Ereignis $viewContentLoaded
hört. Die Funktion des Listeners wird aufgerufen, so dass das Ereignis ausgelöst wird, aber es scheint mir so zu sein, als wäre es bevor die Teilansicht gerendert wird. Ich sehe die Elemente auch nicht, wenn ich einen Haltepunkt in der Funktion des Listeners setze und ihn mit Firebug debugge, noch findet die jQuery-Auswahl innerhalb der Funktion die Elemente der Teilansicht. Diese
ist, was die Steuerung wie folgt aussieht:
angular.module('docinvoiceClientAngularjsApp')
.controller('LoginController', function ($scope, $rootScope) {
$scope.$on('$viewContentLoaded', function(event) {
console.log("content loaded");
console.log($("#loginForm")); // breakpoint here
});
[...]
Ich denke, dass ich etwas tue, falsch, da es hatte mehr Beiträge auf Stackoverflow, wenn dies ein weit verbreiteter Fehler ist.
Wie ich ui-Router und ui-Ansicht, verwende werde ich Ihnen einen Auszug aus der Routing-Datei geben:
angular
.module('docinvoiceClientAngularjsApp', [
'ui.router',
'ngAnimate',
'ngCookies',
'ngResource',
'ngMessages',
'ngRoute',
'ngSanitize',
'ngTouch'
])
.config(function ($routeProvider, $stateProvider) {
$stateProvider
.state('login', {
url: '/',
templateUrl: 'components/login/loginView.html',
controller: 'LoginController'
})
.run(['$state', function ($state) {
$state.transitionTo('login');
}])
[...]
Jede Hilfe sehr geschätzt wird. Dank und freundlichen Grüßen
UPDATE 1: ich den Fehler bis auf die folgenden usecase gestrippt: Die loginView.html sieht wie folgt aus:
<div id="loginContainer" style="width: 300px">
<form id="loginForm" ng-submit="login(credentials)" ng-if="session.token == undefined">
[...]
Sobald ich die ng-if
aus dem div-Tag entfernen Es funktioniert wie erwartet. Das Ereignis wird ausgelöst, nachdem das DOM gerendert wurde. Daher findet jQuery das Element. Wenn die ng-if
an das Div-Tag angefügt ist, ist das Verhalten wie zuerst beschrieben.
UPDATE 2: Wie versprochen habe ich eine funktionierende Demo hinzugefügt, die das unterschiedliche Verhalten beim Hinzufügen einer ng-if
Direktive zeigt. Kann mir jemand die richtige Richtung zeigen? Halten Sie sich nicht an das Login-Formular, da es viel mehr Anwendungsfälle gibt, in denen ich bestimmte Teile einer Ansicht basierend auf einem Ausdruck entfernen und ein paar JavaScript-Sachen machen möchte, nachdem die Teilansicht fertig ist.
können Sie die Arbeits Demo finden Sie hier: Demo
Sie eine Richtlinie für Sie DOM Sachen erstellen können. – dfsq
Ich habe eine [Arbeitsdemo] (http://codepen.io/anon/pen/gbpmQy) basierend auf Ihrem Code erstellt und es funktioniert ordnungsgemäß. Beim nächsten Mal versuch bitte, die Demo selbst zu erstellen. – hon2a
Vielen Dank für die funktionierende Demo. Ich habe die Beschreibung aktualisiert, als ich herausgefunden habe, dass das ng-if das unterschiedliche Verhalten verursacht. Hast du eine Idee, warum es sich anders verhält? Der Ausdruck wird zu "wahr" bewertet, da ich das Login-Formular sehen kann, nur einen Moment zu spät;) – Florian