Javascript 更改路线更改时控制器中的变量?

Javascript 更改路线更改时控制器中的变量?,javascript,angularjs,Javascript,Angularjs,我有一个模板和一些视图,它们是根据它们的路线渲染的: popApp.controller('HomeCtrl', ['$scope', '$routeParams', '$http', function($scope, $routeParams, $http) { $scope.showNow = true; }]); app.config(['$routeProvider', function($routeProvider) { $routeProvider .whe

我有一个模板和一些视图,它们是根据它们的路线渲染的:

popApp.controller('HomeCtrl', ['$scope', '$routeParams', '$http', function($scope, $routeParams, $http) {    
  $scope.showNow = true;
}]);

app.config(['$routeProvider', function($routeProvider) {
  $routeProvider
    .when('/signup', {
      controller:'HomeCtrl',
      templateUrl:'partials/newAccountStage.html'
    })
    .when('/', {
      controller:'HomeCtrl',
      templateUrl:'partials/home.html'
    });
}]);
在我的模板中,我会显示一些大部分时间都想显示的元素,但在遵循某些路线时会隐藏这些元素:

<div ng-show="showNow"></div>

基本上,当用户在/signup路径上时,我想隐藏一些元素


最具角度感的方法是什么?

众所周知,为您想要的任何主视图分离控制器。您可以使用
$routeProvider
,如图所示

popApp.controller('HomeCtrl', [
    '$scope', 
    '$routeParams', 
    '$http', 
    function($scope, $routeParams, $http) {    
        $scope.showNow = true;
    }
]);

popApp.controller('SignupCtrl', [
    '$scope', 
    '$routeParams', 
    '$http', 
    function($scope, $routeParams, $http) {    
        $scope.showNow = true;
    }
]);

app.config(['$routeProvider', function($routeProvider) {
  $routeProvider
    .when('/signup', {
      controller:'SignupCtrl',
      templateUrl:'partials/newAccountStage.html'
    })
    .when('/', {
      controller:'HomeCtrl',
      templateUrl:'partials/home.html'
    });
}]);
另一种做法是使用
$stateProvider
,如果您在另一个控制器中具有此注册功能,并且如果用户尚未注册并且您希望更改页面的“状态”,则您希望呈现不同的屏幕。然后,
SignupCtrl
将成为
HomeCtrl
的状态,您可以将该状态设置为“未注册”,并且它可以使用SignupCtrl

下面是该语法的一个示例:

$stateProvider.state('not signed up', {
  template: 'partials/newAccountStage.html',
  controller: SignupCtrl
})

对2个html使用相同的控制器有点糟糕,因为需要额外的if来处理。你们可以通过观察路由更改事件来重置一些变量。我可能会考虑使用一个全局变量来处理这个问题。为了同意奥斯梅尔所说的,我将使用两个独立的控制器。如果需要在控制器之间共享代码,请使用工厂/服务。