如何在运行时更改AngularJS视图的内容?

时间:2014-08-14 10:59:08

标签: angularjs templates routing

在AngularJS控制器中,我执行$ http.post()请求并使用新数据更新$ scope,这可以正常工作。

但是如果出现错误,我想将同一个控制器的模板更改为另一个。我还没弄明白如何更改控制器的模板。

这是控制器内的一些伪代码:

    // this is the controller
    var self = this

    $http
        .post('/something', $scope.something)
        .success(function(data) {
            $scope.result = data 
        })
        .error(function(err) {
            $scope.error = err
            var statusCode = err.statusCode
            // for example on a 403, I want the template 'errors/403.html' to 
            // be rendered
            self.template = $templateCache.get('errors/' + statusCode + '.html')
        })

任何想法如何可能?

感谢您的任何建议。我在这里有点绝望......

3 个答案:

答案 0 :(得分:1)

尝试

 $location.path('/login');

答案 1 :(得分:0)

首先,您应该设置路由提供程序,然后使用$ location service来更改URL。

配置路由提供程序:

var app = angular.module("myApp", ["ngRoute"]);
app.config(function ($routeProvider) {
$routeProvider.when("/error", { controller: "", templateUrl: "/app/error.html" });
// setup some more routes here as above
$routeProvider.otherwise({ redirectTo: "/login" });

在JS文件中 -

var self = this
$http
.post('/something', $scope.something)
.success(function(data) {
$scope.result = data 
})
.error(function(err) {
$scope.error = err
var statusCode = err.statusCode
// for example on a 403, I want the template 'errors/403.html' to 
// be rendered
$location.path("/error");
})

不要忘记添加angular-route.js文件。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body data-ng-app="myApp">
<div data-ng-view=""></div>

<script src="Scripts/angular-route.js"></script>
</body>
</html>

答案 2 :(得分:0)

angular.module(&#39; myApp&#39;,[&#39; myApp.filters&#39;,&#39; myApp.services&#39;,&#39; myApp.directives&#39;] ,function($ routeProvider,$ locationProvider,$ httpProvider){

var interceptor = ['$rootScope', '$q', function (scope, $q) {

    function success(response) {
        return response;
    }

    function error(response) {
        var status = response.status;

        if (status == 401) {
            window.location = "./index.html";
            return;
        }
        // otherwise
        return $q.reject(response);

    }

    return function (promise) {
        return promise.then(success, error);
    }

}];
$httpProvider.responseInterceptors.push(interceptor);