如何在 angularJS 中交换视图?

Posted

技术标签:

【中文标题】如何在 angularJS 中交换视图?【英文标题】:How to swap views in angularJS? 【发布时间】:2017-07-24 19:01:38 【问题描述】:

我正在尝试创建一个角度应用程序。 加载 index.html 页面时,会显示 2 个链接登录和注册。 当点击登录或注册时,整个视图将被相应的视图替换。

1.注册/登录链接应保持在顶部,点击后应在下方显示相应的视图。

2. 在登录控制器中成功认证后,包括登录和注册链接在内的完整视图应替换为 menu-auth.html 视图。

我已经尝试使用下面的代码,但是 2 个链接仍然消失了,并且出现了登录/注册视图。

同样在登录控制器中触发 http Post 后,会显示 menu-auth.html 但未显示相应的 css,因此我无法单击菜单链接。

我猜menu-auth.html视图没有放在index.html的视图中

index.html

<!doctype html>
<html>

   <head>
     <script src = "js/angular.min.js"></script> 
      <script src = "js/angular-ui-router.min.js"></script>
      <script src = "app/app.js"></script>
      <script src = "controller/login.js"></script>
      <script src = "controller/register.js"></script>
      <script src = "app/config.js"></script> 

      <style>.active  color: red; font-weight: bold; </style>
   </head>
   <body>
      <div ng-app="app">

      <ui-view>

      </ui-view>

      </div>
      </div>
      </body>

</html>

我有两种观点 menu-unauth.html

<a ui-sref="login" ui-sref-active="active">Login</a>
<a ui-sref="register" ui-sref-active="active">Register</a>
<ui-view="unauth"></ui-view>

menu-auth.html

 <a ui-sref=".nentry" ui-sref-active="active">Create Entry</a></br>
<a ui-sref=".ventry" ui-sref-active="active">View entry</a></br>  
<a ui-sref=".logout" ui-sref-active="active">Logout</a></br>

<ui-view="auth"></ui-view>

config.js

app.config(['$stateProvider', function($stateProvider) 

   $stateProvider
  .state('unauth',   
        url:'',
        templateUrl: 'view/menu-unauth.html'   
  ) 

   .state('unauth.login',   
        url:'/login',
        templateUrl: 'view/login.html',
        controller: 'login'     
  )

  .state('unauth.register',   
        url:'/register',
        templateUrl: 'view/register.html',
        controller:'register'       
  ) 

  .state('auth',   
        url:'/menu',
        templateUrl: 'view/menu-auth.html'   
  ) 

]);

app.js

var app = angular.module("app", ['ui.router','ngCookies']);

login.js(控制器)

app.controller('login', function($scope,$http,$cookieStore,$state)

   $scope.login=function() 

   $scope.credentials=
UserName:$scope.email,
Password:$scope.password
;

   $http(
    method: 'POST',
    url: 'test.com/sess',
    data: $scope.credentials
).then(function(response)  
            $state.go('auth');
     
   
);

【问题讨论】:

【参考方案1】:

我对做了如下改动(观察ui-sref值改为包含.dot)

menu-unauth.html

<a ui-sref=".login" ui-sref-active="active">Login</a>
<a ui-sref=".register" ui-sref-active="active">Register</a>
<ui-view></ui-view>

config.js

app.config(['$stateProvider', function($stateProvider) 

   $stateProvider
  .state('unauth',   
        url:'',
        templateUrl: 'view/menu-unauth.html'   
  ) 

   .state('unauth.login',   
        url:'/login',
        templateUrl: 'view/login.html'   
  )

  .state('unauth.register',   
        url:'/register',
        templateUrl: 'view/register.html'   
  ) 
]);

【讨论】:

以上是关于如何在 angularJS 中交换视图?的主要内容,如果未能解决你的问题,请参考以下文章

angularjs如何在视图渲染结束之后,或者render之后执行指令中的link方法呢?

如何在 angularjs 应用程序的部分视图中包含 css 或 javascript 文件...? [关闭]

Laravel 5.1/AngularJS:在 Angular 视图中重置密码(如何验证 CSRF 令牌?)

如何在 AngularJS 中设置嵌套视图?

使用 AngularJS,如何在视图和控制器同步特定更改后触发代码执行?

如何避免 AngularJS 应用程序中模板之间的重复?