1

你如何处理 AngularJS 中的虚拟路径?

例如,在我的测试环境中,我的基本 url 是http://localhost/AppName/,而在生产中,根变为http://www.mysite.com/.

所以在 dev 中,a$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 = '/';
    }]);

}());

在部署到产品之前不必担心在某处切换根路径的任何想法?

4

1 回答 1

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');
    });
});
于 2013-11-05T00:15:22.157 回答