2014-03-30 35 views
0

我正面臨一個問題。我用angular + mvc開發一個登錄表單4.當我在登錄過程之後嘗試重定向到另一個視圖時,問題就開始了。登錄mvc控制器後發出angularJs重定向問題

代碼:

這是我廠:該廠高管在MVC控制器一個AJAX調用我的行動結果,以及它工作得很好。

moduloRegistro.factory('loginRepository', function ($resource) { 
    return { 
     login: function (usuario) { 
      return $resource('Acesso/Logar').save(usuario); 
     } 
    } 
}); 

下面我的控制器:我控制器驗證的結果,如果一切正常,它設法重新到新的URL

moduloRegistro.controller('LoginController', function ($scope, loginRepository, $location, toastr) { 
    $scope.erroLogin = ''; 
    $scope.login = function (usuario) { 
     loginRepository.login(usuario).$promise.then(
      function (response) { 
       if (response.mensagemDeErro != undefined || response.mensagemDeErro != null) 
        toastr.error(response.mensagemDeErro); 
       else 
        $location.url('Board/Programa'); 
      }, 
      function (erro) { 
       toastr.error(erro.mensagemDeErro); 
      } 
     ); 
    }; 
}); 

這是我的模塊:我在哪裏配置路由和模板被渲染成ng-view。

var moduloRegistro = angular.module('moduloRegistro', ['ngRoute', 'ngResource']); 


moduloRegistro.config(function ($routeProvider, $locationProvider) { 
    $routeProvider.when('/', 
     { 
      templateUrl: '/Templates/Acesso/login.html', controller: 'LoginController' 
     }); 
    $routeProvider.when('/Board/Programa', 
     { 
      templateUrl: '/Templates/Board/programa.html', controller: 'BoardController' 
     }); 
    $locationProvider.html5Mode(true) 
}); 

moduloRegistro.value('toastr', toastr); 

這是我RouteConfig:

routes.MapRoute(
       name: "Board SPA", 
       url: "Board/{*catchall}", 
       defaults: new { controller = "Board", action = "Index" } 
     ); 

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Acesso", action = "Index", id = UrlParameter.Optional } 
      ); 

問題:當他重定向到新的觀點,BoardController沒有工作和我的主景SPA頁面的HTML是在NG-視圖中繪製。

婁我局的控制和工廠:

//Controller. 
moduloRegistro.controller('BoardController', function ($scope, boardRepository, $location, toastr) { 
    $scope.partes = boardRepository.getPartes(); 
}); 

//Factory 
moduloRegistro.factory('boardRepository', function ($resource) { 
    return { 
     getPartes: function() { 
      return $resource('Board/ObterPartesEscola').get(); 
     } 
    } 
}); 

回答

0

看看當你定義你的路線,你可以使用resolve功能。更多信息可在此answer

0

不是解決這一具體問題,但只是一點點的代碼風格可以找到...

此:

moduloRegistro.config(function ($routeProvider, $locationProvider) { 
$routeProvider.when('/', 
    { 
     templateUrl: '/Templates/Acesso/login.html', controller: 'LoginController' 
    }); 
$routeProvider.when('/Board/Programa', 
    { 
     templateUrl: '/Templates/Board/programa.html', controller: 'BoardController' 
    }); 
$locationProvider.html5Mode(true) 
}); 

更好的是這樣的:

moduloRegistro.config(function ($routeProvider, $locationProvider) { 
    $routeProvider.when('/', 
     { 
      templateUrl: '/Templates/Acesso/login.html', 
      controller: 'LoginController' 
     }) 
    .when('/Board/Programa', 
     { 
      templateUrl: '/Templates/Board/programa.html', 
      controller: 'BoardController' 
     }); 
    $locationProvider.html5Mode(true) 
}); 

無論何時您多次使用某個服務,都可以通過不使用分號和'.whatever'來關聯它們。