2016-07-07 53 views
0

所以我建立了一個網站來使用Angular Routing,但是我變得非常奇怪。當我訪問路由時,它似乎無限期地在控制器中運行代碼,直到選項卡崩潰。這裏是我的路由:AngularJs控制器代碼無限期運行

angular.module(app.appName) 
    .config([ 
     '$routeProvider', function($routeProvider) { 
      $routeProvider 
       .when('/', { 
        controller: 'homeController', 
        caseInsensitiveMatch: true 
       }) 
       .when('/MyWishlists', { 
        templateUrl: 'assets/html/areas/MyWishlists/myWishlists.html', 
        controller: 'myWishlistsController', 
        caseInsensitiveMatch: true 
       }) 
       .when('/Login', { 
        templateUrl: 'assets/html/areas/login/login.html', 
        controller: 'loginController', 
        caseInsensitiveMatch: true 
       }) 
       .otherwise({ redirectTo: '/' }); 
     } 
    ]); 

這裏是我的loginController

angular.module(app.appName) 
    .controller('loginController', ['$scope', 
     function ($scope) { 
      console.log('login'); 
     }]); 

當我訪問http://localhost:50925/Login會到Chrome瀏覽器結束其運行console.log('login');一遍又一遍。我在這裏做什麼 這是造成這種情況,我從來沒有見過它?

難道是我的連接文件?我正在使用gulp將所有控制器合併到controllers.js

編輯:我也剛剛嘗試創建一個新的控制器,homeController並將其添加到我的路線中,並且在其定義的任一路線上根本不使用homeController

angular.module(app.appName) 
    .config([ 
     '$routeProvider', function($routeProvider) { 
      $routeProvider 
       .when('/', { 
        controller: 'homeController', 
        caseInsensitiveMatch: true 
       }) 
       .when('/Home', { 
        controller: 'homeController', 
        caseInsensitiveMatch: true 
       }) 
       .when('/MyWishlists', { 
        templateUrl: 'assets/html/areas/MyWishlists/myWishlists.html', 
        controller: 'myWishlistsController', 
        caseInsensitiveMatch: true 
       }) 
       .when('/Login', { 
        templateUrl: 'assets/html/areas/login/login.html', 
        controller: 'loginController', 
        caseInsensitiveMatch: true 
       }) 
       .otherwise({ redirectTo: '/' }); 
     } 
    ]); 

angular.module('wishlist') 
    .controller('homeController', ['$scope', 
     function ($scope) { 
      console.log('home'); 
     }]); 

回答

0

我已解決此問題。對我來說問題是我使用ASP.NET,但我使用的方法完全繞過MVC管道。爲了做到這一點,我需要創建一個Index.cshtml並告訴應用程序來提供文件。但是,此時它會將所有未在web.config重寫規則中明確列出的文件作爲HTML返回給瀏覽器。我允許使用assets/js文件夾,但不能使用我的HTML,所以不是使用Angular爲HTML模板提供服務,而是將整個重新編譯的頁面作爲對瀏覽器的響應進行檢索,從而爲瀏覽器提供整個HTML頁面來渲染新的路線,並且它一直在停止,直到瀏覽器最終結束它。

總之,要解決這個問題,我不得不在我的web.config中將它添加到我的規則中。

<rewrite> 
    <rules> 
    <rule name="AngularJS Conditions" stopProcessing="true"> 
     <match url="(wwwroot/.*|assets/min.*|assets/html.*|bower_components/.*|api/.*)" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> 
     <action type="None" /> 
    </rule> 
    <rule name="AngularJS Wildcard" enabled="true"> 
     <match url="(.*)" /> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false" /> 
     <action type="Rewrite" url="index.cshtml" /> 
    </rule> 
    </rules> 
</rewrite> 
+0

它是有道理的。在開發java spring mvc應用程序時,我遇到了同樣的問題。當web.xml首先讀取並使用spring url映射時,角度路由就被它隱藏了。 –

0

您應該在定義角度模塊時注入ngRoute。這裏是Link這將幫助你定義ngRoute並希望它能幫助你。

+0

嗨,感謝您的回覆。我確定我在模塊中注入了'ngRoute',但我會盡可能檢查。 –

+0

我在我的模塊中注入了'ngRoute',在這裏:'angular.module(app.appName,[ 'ngRoute', 'ngResource' ]);' –

0

它看起來像你的控制器doest中的函數有一個名稱和一些錯誤。你可以檢查一下。你需要添加這樣的東西。

angular.module('myApp',['ngRoute']); 

Angularjs需要注入要使用的模塊。所有依賴項在使用之前需要注入。

一切看起來不錯。

+0

嗨,我已經設置'app.appName'爲以前的js文件中的全局變量,如果這就是你的意思。這種方法在許多其他項目中都有效,但我會嘗試在控制器中明確定義模塊名稱。 –