2013-07-09 48 views
0

我正在使用Angular.js,Node.js和Socket.io(以及其他)構建應用程序。我的問題是,當我試圖按照鏈接路由到登錄頁面時,我最終處於無限循環。 jquery document.ready函數被反覆調用,並且每次發生這種情況時都會有另一個套接字連接到用戶。該頁面甚至不會加載,因爲這會繼續被調用。我真的卡住了,所以任何幫助將不勝感激。document.ready已在無限循環中調用angular.js

下面是客戶端的路由配置:

window.app = angular.module('MEAN', ['ngCookies', 'ngResource']); 
window.app.config(['$routeProvider', function($routeProvider) { 
    $routeProvider. 
    when('/', { templateUrl: 'views/index.html' }). 
    when('/signin', { 
     templateUrl: '/partials/signin', 
     controller: SigninCtrl 
    }). 
    when('/signup', { 
     templateUrl: '/partials/signup', 
     controller: SignupCtrl 
    }). 
    otherwise({redirectTo: '/'}); 
}]); 

//Removing tomcat unspported headers 
window.app.config(['$httpProvider', function($httpProvider, Configuration) { 
    //delete $httpProvider.defaults.headers.common["X-Requested-With"]; 
}]); 

//Setting HTML5 Location Mode 
window.app.config(['$locationProvider', function($locationProvider) { 
    $locationProvider.html5Mode(true); 
    $locationProvider.hashPrefix("!"); 
}]); 

這裏是控制器:

function SigninCtrl($scope, $http, $location) { 
$scope.form = {}; 
    $scope.title = "Sign In"; 
    $scope.SignIn = function() { 
    $http.post('/users/session', $scope.form). 
    success(function(data){ 
     console.log("Successful sign in", data); 
     $location.path('/'); 
    }) 
    .error(function (data) { 
     console.log("There was an error"); 
     $scope.errors = data.errors; 
    }); 
    }; 
} 

這裏是我使用了諧音玉模板:

extends ../layouts/default 

block content 
    .row 
    .offset1.span5 
     a(href="/auth/facebook") 
     img(src="/img/icons/facebook.png") 
     a(href="/auth/github") 
     img(src="/img/icons/github.png") 
     a(href="/auth/twitter") 
     img(src="/img/icons/twitter.png") 
     a(href="/auth/google") 
     img(src="/img/icons/google.png") 
    .span6 
     if (typeof errors !== 'undefined') 
     .fade.in.alert.alert-block.alert-error 
      a.close(data-dismiss="alert", href="javascript:void(0)") x 
      ul 
      each error in errors 
       li= error.type 

     block auth 
extends auth 

block auth 
    form.signin.form-horizontal(class="simple-form") 
    .control-group 
     label.control-label(for='email') Email 
     .controls 
     input#email(type='text', name="email", placeholder='Email') 

    .control-group 
     label.control-label(for='password') Password 
     .controls 
     input#password(type='password', name="password", placeholder='Password') 

    .form-actions 
     button(ng-click='SignIn()') Sign in 
       
     | or  
     a.show-signup(href="/signup") Sign up 

這裏是文件準備功能:

window.bootstrap = function() { 
    angular.bootstrap(document, ['MEAN']); 
} 
window.init = function() { 
window.bootstrap(); 
} 

window.connectSocket = function(){ 
    var socket = io.connect(); 
    socket.on('connect', function(message){ 
    console.log("socket connected"); 
    }); 
} 

$(document).ready(function() { 
    //Fixing facebook bug with redirect 
    console.log("Document ready!"); 
    if (window.location.hash == "#_=_") window.location.hash = ""; 
    window.init(); 
    window.connectSocket(); 
}); 
+0

目前還不清楚你的文檔就緒函數駐留在哪裏,也沒有定義window.bootstrap函數的位置,也不知道你在哪裏初始化你的角度應用程序。 – Stewie

+0

我相信我在顯示的代碼中添加了兩個缺失的東西,我希望這就是你的意思 – user2009114

回答

0

我覺得啞巴,但我找到了問題。類似於這個問題:What web server configuration is required to make AngularJS routing function correctly?

我實際上已經將路由從服務器移到客戶端,並且在部分模板中包含auth,並且在auth文件中我有一個包含頭部模板的東西, 。最後,它試圖在循環中包含相同的頭文件...希望這可以幫助稍後出現相同問題的人。只是確保你沒有多次包含頭文件...