Для частичного представления я хочу сделать некоторые материалы JavaScript, которые я обычно делал бы с $(document).ready(function() {...})
, например. свяжите венец-слушателей с элементами. Я знаю, что это не работает для AngularJS и частичных представлений, загруженных в представление "root".
Таким образом, я добавил слушателя к контроллеру, который прослушивает событие $viewContentLoaded
. Вызывается функция прослушивателя, поэтому событие запускается, но мне кажется, что это происходит до того, как будет показано частичное представление. Я также не вижу элементы, когда я устанавливаю точку останова в функции слушателя и отлаживаю ее с помощью firebug, а также выбор jquery внутри функции не находит частичный элемент представления.
Вот что выглядит контроллер:
angular.module('docinvoiceClientAngularjsApp')
.controller('LoginController', function ($scope, $rootScope) {
$scope.$on('$viewContentLoaded', function(event) {
console.log("content loaded");
console.log($("#loginForm")); // breakpoint here
});
[...]
Я предполагаю, что я делаю что-то не так, поскольку в stackoverflow должно быть больше сообщений, если это обычная ошибка.
Поскольку я использую ui-router и ui-view, я дам вам отрывок файла маршрутизации:
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');
}])
[...]
Любая помощь приветствуется. Спасибо и любезны.
ОБНОВЛЕНИЕ 1: Я удалил ошибку до следующей версии usecase: loginView.html выглядит следующим образом:
<div id="loginContainer" style="width: 300px">
<form id="loginForm" ng-submit="login(credentials)" ng-if="session.token == undefined">
[...]
Как только я удаляю ng-if
из тега div, он работает так, как ожидалось. Событие запускается после рендеринга DOM, поэтому jQuery находит элемент. Если ng-if
прикреплен к тегу div, поведение будет описано вначале.
ОБНОВЛЕНИЕ 2: Как и было обещано, я добавил рабочую демонстрацию, в которой показано различное поведение при добавлении директивы ng-if
. Может ли кто-нибудь указать мне правильное направление? Не придерживайтесь формы входа в систему как таковой, так как есть много других вариантов использования, когда я хочу удалить определенные части представления на основе некоторого выражения и сделать некоторые файлы JavaScript после частичного просмотра.
Здесь вы можете найти рабочую демонстрацию: Демо