发表于: 2020-03-30 23:48:41

1 1541


今天完成的事情:今天学习了AngularJS 路由
明天计划的事情:继续学习AngularJS的内容
遇到的问题:没太懂还是要继续实际操作一下怎么用还要继续加深理解
收获:概念较为复杂还是不太懂

AngularJS 路由允许我们通过不同的 URL 访问不同的内容。

通过 AngularJS 可以实现多视图的单页 Web 应用(single page web application,SPA)。

常我们的 URL 形式为 http://123.com/first/page,但在单页 Web 应用中 AngularJS 通过 #! + 标记 实现,例如:

http://123.com/#!/first

http://123.com/#!/second

http://123.com/#!/third

当我们点击以上的任意一个链接时,向服务端请的地址都是一样的 (http://123.com/)。 因为 #! 号之后的内容在向服务端请求时会被浏览器忽略掉。 所以我们就需要在客户端实现 #! 号后面内容的功能实现。 AngularJS 路由就通过 #! + 标记 帮助我们区分不同的逻辑页面并将不同的页面绑定到对应的控制器上。简单的实例

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>AngularJS 路由实例</title>
  <script src="https://cdn.staticfile.org/angular.js/1.7.0/angular.min.js"></script>
  <script src="https://cdn.staticfile.org/angular.js/1.7.0/angular-route.min.js"></script>
</head>

<body ng-app='routingDemoApp'>

  <h2>AngularJS 路由应用</h2>
  <ul>
    <li><a href="#!/">首页</a></li>
    <li><a href="#!/computers">电脑</a></li>
    <li><a href="#!/printers">打印机</a></li>
    <li><a href="#!/blabla">其他</a></li>
  </ul>

  <div ng-view></div>
  <script>
    angular.module('routingDemoApp', ['ngRoute'])
      .config(['$routeProvider'function ($routeProvider) {
        $routeProvider
          .when('/', { template: '这是首页页面' })
          .when('/computers', { template: '这是电脑分类页面' })
          .when('/printers', { template: '这是打印机页面' })
          .otherwise({ redirectTo: '/' });
      }]);
  </script>
</body>

</html>

运行结果

点击其他选项

解析一下

1、载入了实现路由的 js 文件:angular-route.js。

2、包含了 ngRoute 模块作为主应用模块的依赖模块。

angular.module('routingDemoApp',['ngRoute'])

3、使用 ngView 指令

<div ng-view></div>

该 div 内的 HTML 内容会根据路由的变化而变化。

4、配置 $routeProvider,AngularJS $routeProvider 用来定义路由规则。

module.config(['$routeProvider'function ($routeProvider) {
      $routeProvider
        .when('/', { template: '这是首页页面' })
        .when('/computers', { template: '这是电脑分类页面' })
        .when('/printers', { template: '这是打印机页面' })
        .otherwise({ redirectTo: '/' });
    }]);

AngularJS 模块的 config 函数用于配置路由规则。通过使用 configAPI,我们请求把$routeProvider注入到我们的配置函数并且使用$routeProvider.whenAPI来定义我们的路由规则。

$routeProvider 为我们提供了 when(path,object) & otherwise(object) 函数按顺序定义所有路由,函数包含两个参数:

第一个参数是 URL 或者 URL 正则规则。

第二个参数是路由配置对象。

路由设置对象

AngularJS 路由也可以通过不同的模板来实现。

$routeProvider.when 函数的第一个参数是 URL 或者 URL 正则规则,第二个参数为路由配置对象。

路由配置对象语法规则如下:

$routeProvider.when(url, {

    template: string,

    templateUrl: string,

    controller: string, function 或 array,

    controllerAs: string,

    redirectTo: string, function,

    resolve: object<key, function>

});

template:

如果我们只需要在 ng-view 中插入简单的 HTML 内容,则使用该参数:

 .when('/computers', { template: '这是电脑分类页面' })

templateUrl:

如果我们只需要在 ng-view 中插入 HTML 模板文件,则使用该参数:

$routeProvider.when('/computers', {
      templateUrl: 'views/computers.html',
    });

controller:

function、string或数组类型,在当前模板上执行的controller函数,生成新的scope。

controllerAs:

string类型,为controller指定别名。

redirectTo:

重定向的地址。

resolve:

指定当前controller所依赖的其他模块。

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>AngularJS 路由实例</title>
  <script src="https://cdn.staticfile.org/angular.js/1.7.0/angular.min.js"></script>
  <script src="https://cdn.staticfile.org/angular.js/1.7.0/angular-route.min.js"></script>
  <script type="text/javascript">
    angular.module('ngRouteExample', ['ngRoute'])
      .controller('HomeController'function ($scope$route) { $scope.$route = $route; })
      .controller('AboutController'function ($scope$route) { $scope.$route = $route; })
      .config(function ($routeProvider) {
        $routeProvider.
          when('/home', {
            templateUrl: 'embedded.home.html',
            controller: 'HomeController'
          }).
          when('/about', {
            templateUrl: 'embedded.about.html',
            controller: 'AboutController'
          }).
          otherwise({
            redirectTo: '/home'
          });
      });
  </script>


</head>

<body ng-app="ngRouteExample" class="ng-scope">
  <script type="text/ng-template" id="embedded.home.html">
      <h1> Home </h1>
  </script>

  <script type="text/ng-template" id="embedded.about.html">
      <h1> About </h1>
  </script>

  <div>
    <div id="navigation">
      <a href="#!/home">Home</a>
      <a href="#!/about">About</a>
    </div>

    <div ng-view="">
    </div>
  </div>
</body>

</html>

运行结果

点击其他选项

路由设置对象参数规则:

$routeProvider.when(url,{

    template:string, //在ng-view中插入简单的html内容

    templateUrl:string, //在ng-view中插入html模版文件

    controller:string,function / array, //在当前模版上执行的controller函数

    controllerAs:string, //为controller指定别名

    redirectTo:string,function, //重定向的地址

    resolve:object<key,function> //指定当前controller所依赖的其他模块

});

还是没太明白明天继续研究一下至少要会操作使用


返回列表 返回列表
评论

    分享到