2013-11-04 182 views
1

如何處理AngularJS中的虛擬路徑?AngularJS和虛擬路徑

例如在我的測試環境中,我的基礎URL是http://localhost/AppName/,在生產中,根目錄變爲http://www.mysite.com/

因此,在開發中,$http.get去說http://localhost/AppName/Controller/Action,但在prod該路徑不存在,它需要是http://www.mysite.com/Controller/Action

你怎麼處理$http調用,還有,當用$httpBackend嘲笑後端時的單元測試?

我在_Layout.cshtml(使用ASP.NET MVC)試過,但並不在單元測試工作:

<script> 
    (function() { 
     'use strict'; 

     var app = angular.module('cs').value('urlHelper', { 
      getUrl: function (url) { 
       var basePath = '@VirtualPathUtility.ToAbsolute("~/")'; 

       return basePath + url; 
      } 
     }); 
    }()); 
</script> 

而且曾嘗試:

(function() { 
    'use strict'; 

    var app = angular.module('cs', []); 

    app.run(['$rootScope', function ($rootScope) { 
     $rootScope.basePath = '/'; 
    }]); 

}()); 

任何想法不不得不擔心在部署到產品之前切換根路徑?

+0

不要域名打擾,以'/'開始。它會自動指向正確的根。 – Mik378

+0

@ Mik378 - 你是說我只需要在$ http中這樣寫請求:'$ http.get('/ Controller/Action')',這兩種情況都可以工作嗎? – Sam

+0

是的,確切地說。我在我的應用程序中工作。 – Mik378

回答

1

basePath可以是一個值,urlHelper是一個依賴於basePath的服務。

在服務器端生成的頁面中,服務器將注入VirtualPathUtility找到的任何值,並且在測試中,您將手動爲您注入任何作品。

剃刀:

<script> 
    angular.module('cs').value('basePath', '@VirtualPathUtility.ToAbsolute("~/")'); 
</script> 

其他js文件:

angular.module('cs').factory('urlHelper', function (basePath) { 
    return { 
     getUrl: function (url) { 
      return basePath + url; 
     } 
    }; 
}); 

測試:

var urlHelper; 

beforeEach(function() { 

    module(function($provide) { 
     $provide.value('basePath', '/'); 
    }); 

    inject(function($injector) { 
     urlHelper = $injector.get('urlHelper'); 
    }); 
}); 
+0

你能提供一個樣本嗎? – Sam