8

Tôi đang ở phần cuối của trí thông minh, dây thần kinh, mọi thứ, trong 4 giờ qua tôi đang cố gắng gỡ lỗi và đọc tất cả trên internet những vấn đề có thể Với cái này.

Vì vậy, tôi đang làm việc trên chế giễu lên một ứng dụng di động và logic của tôi là như thế này:

  1. Nếu người dùng đã đăng nhập trong quá khứ, chúng ta có dữ liệu trong localStorage về điều đó, sau đó cho anh ta việc niêm yết . này đang ẩn
  2. Nếu chúng tôi kết nối với internet, hãy hiển thị danh sách trước và trong kiểm tra lý lịch để xem liệu anh ấy có còn đăng nhập
  3. Nếu anh ấy KHÔNG, chuyển hướng đến trang đăng nhập.

Trên màn hình chính chính, tôi đánh giá các câu lệnh trên, trước tiên tôi sẽ hiển thị danh sách nếu bạn có dữ liệu localStorage, sau đó tôi kiểm tra trực tuyến và chuyển hướng để đăng nhập nếu cần.

Bất cứ khi nào tôi có hai trạng thái $ hoặc $ vị trí, nó vòng. Giống như trình duyệt gần như đóng băng, may mắn là Chrome. và tôi nhận được Cannot call method 'insertBefore' of null. Từ những gì tôi đọc, một vấn đề router angular.ui được biết đến, nếu được sử dụng xấu hoặc một số vấn đề thần bí khác.

Một số Code:

Những phát thải sự kiện và máy thu, mà tôi gọi trong sự trở lại của StateManagement Dịch vụ của tôi

//Notification Helpers, also exposed, to keep them in the same scope tree. 
     function emitNotification (event, data) { 
      console.log('Emitting event: ' + event); 
      $rootScope.$emit(event, data); 

     } 

     function emitListen (event, fn) { 
      console.log('Listening for: ' + event); 
      $rootScope.$on(event, function (e, data) { 
       fn(data); 
      }); 

     } 

. . .LOGIC

//Update the userData in localStorage and in .value 
           $auth.storage.set('userData', data); 
           userData = $auth.storage.get('userData'); //TODO: Redundant, store it directly, is it ok? 

           emitNotification('event:auth-okServer', data); 
           //return 'ok-server'; 

... trở lại dịch vụ của tôi

}, 
      loginSuccess: function(data){ 
       emitNotification('event:auth-loginSuccess', data); 
      }, 
      loginFailed: function(data){ 
       emitNotification('event:auth-loginFailed', data); 
      }, 
      notify: emitNotification, 
      listen: emitListen 

Và đây là trong điều khiển của tôi:

.config(function config($stateProvider) { 
     $stateProvider 
      .state('sidemenu.home', { 
       url: '/home', 
       views: { 
        'topView': { 
         controller: 'HomeCtrl', 
         templateUrl: 'home/home.tpl.html' 
        } 
       } 
      }) 
      .state('sidemenu.home.list', { 
       url: '/list', 
       templateUrl: 'home/home-list.tpl.html', 
       controller: 'ListCtrl' 
      }) 
      .state('sidemenu.home.login', { 
       url: '/login', 
       templateUrl: 'home/home-login.tpl.html', 
       controller: 'LoginCtrl' 
      }) 
      .state('sidemenu.home.register', { 
       url: '/register', 
       templateUrl: 'home/home-register.tpl.html', 
       controller: 'RegisterCtrl' 
      }) 
      .state('sidemenu.home.coach', { 
       url: '/coach', 
       templateUrl: 'home/home-coach.tpl.html', 
       controller: 'CoachCtrl' 
      }) 
      ; 
    }) 

    .controller('HomeCtrl', function HomeController($scope, $state, $location, localState) { 

     /** 
     * EVENT EMITTERS 
     * @event:auth-loginSuccess - Login has been succesfull, let everybody know. 
     * @event:auth-loginFailed - Login has failed, do something. 
     * @event:auth-okServer  - Server challenge ok, user is logged in. 
     * @event:auth-okLocal  - Local challenge ok, user appears to be logged in. 
     * @event:auth-login  - Go to login 
     * @event:general-coach  - Start the coach 
     **/ 


     /** 
     * ===== FIRST LOGIC ===== 
     **/ 


     //We are placing emitters in the same children-parent tree scope, the one from localState, and we're listening to them. 
     localState.listen('event:auth-okLocal', function(data) { 
      console.log('EVENT: auth-okLocal has been triggered'); 
      //$state.transitionTo('sidemenu.home.list'); 
      $location.path('/sidemenu/home/list'); 
      //First we will be redirected on listpage 
     }); 

     localState.listen('event:auth-login', function() { 
      console.log('EVENT: auth-login has been triggered'); 
      $location.path('/sidemenu/home/login'); 
     }); 
     //Server check fails, redirect to login 
     localState.listen('event:general-coach', function(data) { 
      console.log('EVENT: general-coach has been triggered'); 
      //$state.transitionTo('sidemenu.home.coach'); 
      $location.path('/sidemenu/home//coach'); 
     }); 

     //After we have all the listeners in place do the checking & broadcasting. 
     localState.check(); 

Tôi đang làm gì sai?

Tôi đã sửa lỗi bộ phát, chức năng check() của tôi tạo ra tất cả các bộ phát, tôi đã thử một số kết hợp trên ui.router và tôi đã thất bại thảm hại :).

Trả lời

2

tôi đã cùng một vấn đề với việc sử dụng hợp cụ thể đó, nó là một lỗi với router ui, nhưng chờ đợi cho nó để kết thúc sự thay đổi trạng thái trước khi chuyển giải quyết nó:

if (webAPIAuth.isLoggedIn()) { $scope.$on('$stateChangeSuccess', function() { $state.go('dashboard'); }); }

+0

Vâng, tôi đoán tại một thời điểm nào đó có một số loại kinh doanh dở dang trong trạng thái của ui.router, và đó là lý do tại sao tôi thử chạy lần thứ hai. Để đến trang đăng nhập 3 giây sau, nó thực hiện chính xác điều tương tự, tôi thành thật nghĩ rằng nó không may sự phối hợp. Là một IDEA, tôi có thể móc trình xử lý sự kiện lắng nghe sự kiện 'event: auth-login' sau khi thành công' '$ stateChangeSuccess'' trên trang danh sách không? –

+0

Không, điều đó vẫn không ổn, trang danh sách sẽ được truy cập rất nhiều. Những gì tôi thực sự nhận thấy là các url trong trang của tôi thay đổi như điên từ danh sách để đăng nhập, tôi có nghĩa là một vòng lặp chuyển hướng trừu tượng thực sự. Nên có một cách để chuỗi sự kiện, khi hai sự kiện cụ thể cháy sau đó sau đó nó sẽ đưa tôi đến trang đăng nhập, nhưng tôi trong một chút sương mù về việc này.:) –

+0

hmmmm, https://groups.google.com/forum/#!topic/angular/Ilv1uPOTxgY :) –

Các vấn đề liên quan