Aby uzyskać częściowy widok, chcę zrobić trochę kodu JavaScript, który zwykle robiłbym z $(document).ready(function() {...})
, np. wiążą detektory weneckie z elementami. Wiem, że to nie działa dla AngularJS i częściowych widoków załadowanych do widoku "root".
W ten sposób dodałem słuchacza do kontrolera, który słucha zdarzenia $viewContentLoaded
. Funkcja detektora jest wywoływana, więc zdarzenie jest uruchamiane, ale wydaje mi się, że jest to przed renderowaniem częściowym. Nie widzę również elementów, gdy ustawiam punkt przerwania w funkcji odbiornika i debuguję go przy użyciu firebug, ani też wybór jquery w funkcji nie odnajduje elementów częściowego widoku.
To co kontroler wygląda następująco:
angular.module('docinvoiceClientAngularjsApp')
.controller('LoginController', function ($scope, $rootScope) {
$scope.$on('$viewContentLoaded', function(event) {
console.log("content loaded");
console.log($("#loginForm")); // breakpoint here
});
[...]
myślę, że robię coś złego, ponieważ nie musiało być więcej stanowisk na stackoverflow jeśli jest to wspólny błąd.
Ponieważ używam UI-routera i UI-view, dam wam fragment pliku routingu:
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');
}])
[...]
Każda pomoc jest mile widziana. Dziękujemy i poważaniem
UPDATE 1: rozebrałem błąd w dół do następnego usecase: The loginView.html wygląda następująco:
<div id="loginContainer" style="width: 300px">
<form id="loginForm" ng-submit="login(credentials)" ng-if="session.token == undefined">
[...]
Jak tylko usunąć ng-if
ze znacznika div działa zgodnie z oczekiwaniami. Zdarzenie jest wywoływane po renderowaniu modelu DOM, dlatego jQuery znajduje element. Jeśli ng-if
jest dołączony do znacznika div, zachowanie jest po raz pierwszy opisane.
UPDATE 2: Zgodnie z obietnicą dodałem demo roboczy, który pokazuje różne zachowanie podczas dodawania dyrektywę ng-if
. Czy ktoś może wskazać mi właściwy kierunek? Nie przyklejaj się do formularza logowania jako takiego, ponieważ istnieje wiele innych przypadków użycia, w których chcę usunąć określone części widoku w oparciu o pewne wyrażenie i zrobić pewne elementy JavaScript po przygotowaniu częściowego widoku.
można znaleźć demo pracuje tutaj: Demo
Można utworzyć dyrektywy dla ciebie DOM rzeczy. – dfsq
Stworzyłem [działające demo] (http://codepen.io/anon/pen/gbpmQy) na podstawie Twojego kodu i działa poprawnie. Następnym razem spróbuj dostarczyć wersję demonstracyjną. – hon2a
Wielkie dzięki za działające demo. Zaktualizowałem opis, ponieważ odkryłem, że ng-if powoduje inne zachowanie. Czy masz pomysł, dlaczego zachowuje się inaczej? Wyrażenie jest oceniane jako "prawdziwe", ponieważ widzę formularz logowania, chwilę za późno;) – Florian