• 搭建带路由的AngularJs框架


    一、AngularJs框架简介:

      AngularJs是一种能够轻松实现一个应用开发的JS框架,其较为突出的特点是:模块化、数据的双向绑定和依赖注入等等。

        模块化:AngularJs中存在模块的概念,即每个模块必须由一个控制器来控制,控制器在应用中具有唯一一个名称;

        双向绑定:将控制器中赋值给变量的数据通过一个通道($scope)实现视图(view)和控制器(controller)之间的连接,视图在修改数据时会立刻更新$scope,同样的$scope发生改变时也会立刻重新渲染视图;

        依赖注入:类似于C语言中文件外的函数在本文件中使用前,必须先声明一样,每一个控制器中所要用到的服务(可以理解为函数)都要在开头作为参数声明;

    二、路由

      $route服务是AngularJs中的一个服务,作用是声明容器和其对应的控制器的对应关系,由于容器的存在,配合路由,使得应用实际上变成一个单页面应用程序,在一个HTML页面中声明所有控制器,并为程序设置一个个容器,不同的容器调用不同的控制器实现不同功能,切换容器达到切换功能的效果,页面上显示为页面的切换。

    三、框架的搭建

      首先,在一个HTML文件中声明你的应用:

    <html ng-app="myApp">
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>My AngularJS App</title>
      <meta name="description" content="">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="css/style.css">
    
      <script src="lib/angular/angular.min.js"></script>
      <script src="lib/angular/angular-ui-router.min.js"></script>
    
      <script src="js/app.js"></script>
      <script src="module/mainCtrl.js"></script>
      <script src="module/tab.index/indexCtrl.js"></script>
      <script src="hjx/homeCtrl.js"></script>
      <script src="hjx/backgroundCtrl.js"></script>
    </head>
    <body ng-controller="MainCtrl">
      <div ui-view></div>
    </body>
    </html>

    用ng-app命令声明app名字为myAPP,然后像其他HTML文件一样,声明引用的演示文件、脚本文件等,最后再声明各模块的控制器文件;这里必须先引入angularjs.min.js文件,再引用angular-ui-router.min.js文件,后者依赖前者;

    为这个HTML文件声明控制器,名为MainCtrl;在里层的一个div标签中声明视图的容器,接下来的每个视图都将放在这个div标签中。

      然后,配置路由:

     1 var myApp = angular.module("myApp", ['ui.router']);
     2 myApp.config(function ($stateProvider, $urlRouterProvider) {
     3     $urlRouterProvider.otherwise('background');
     4     //$stateProvider.otherwise("home");
     5     $stateProvider
     6         .state("home", {
     7             url: "/home",
     8             templateUrl: "hjx/home.html",
     9             controller: 'homeCtrl'
    10         })
    11         .state("background", {
    12             url: "/background",
    13             templateUrl: "hjx/background.html",
    14             controller: 'BackgroundCtrl'
    15         })
    16         .state("tabs", {
    17             url: "/tabs",
    18             templateUrl: "module/tabs.html"
    19         })
    20         .state("tabs.index", {
    21             url:"/index",
    22             templateUrl: "module/tab.index/index.html",
    23             controller:'IndexCtrl'
    24         })
    25         .state("tabs.view", {
    26             url:"/view",
    27             templateUrl: "module/tab.view/view.html"
    28         })
    29         .state("single", {
    30             url:"/single",
    31             templateUrl: "module/single/single.html"
    32         });
    33     //$stateProvider.otherwise("home");
    34 });

    使用APP.config()函数为应用配置路由,这里注入$stateProvider和$urlRouterProvider服务,需要说明的是,按照AngularJs的教程只用$stateProvider来配置路由无法成功,报注入错误的错误信息,所以引入$urlRouterProvider服务,当没有选择任何视图时,跳转到$urlRouterProvider.otherwise('background')所指明的视图中。路由的配置语法,跟switch语句很像,当状态(state)满足任一状态时,显示对应的视图,并调用对应视图的控制器,从而实现页面跳转,实则为状态的跳转。

      url:URL中显示的路径

      templateUrl:模板(视图)路径

      controller:模板(视图)对应的控制器

    • 为什么在这里指明了控制器,状态跟换时会自动找到对应的控制器进行调用呢?

      因为在index.html文件中,已经引用了此文件,也就是在引用一加载的时候,应用已经知道这个控制器了,在需要的时候,这个控制器就会被调用。

    • 路由配置有顺序的概念吗?

      没有,只有对应关系,没有先后关系,模板对应控制器,对应显示的路径。就像switch语句中每个case没有先后,但每一个case对应一段需要执行的代码。

    • $urlRouterProvider.otherwise('background');”语句可以写后面吗?

      可以,就好比switch语句的default可以写前面也可以写后面。

      最后,写各个视图:

    自己写的各个视图可以按照功能模块分成一个个文件夹,每一个写好的控制器,都有唯一的一个名字。并且为了方便,会直接在index.html文件中引用。

    值得提一下的是,为了能够方便地跳转到各个状态,可以在index.html中视图容器外添加一个菜单栏,这样菜单栏不会随着状态的跳转而不见,就方便随意跳转了。这种设计和许多官网的设计是一样的,这说明,这种设计很实用。

  • 相关阅读:
    javascript中依赖属性(Dependency Property)的实现
    金山卫士UI原理解析(2)CBkWindow
    WTL学习笔记(5)双缓冲技术和动画(BufferedPaint)
    数据结构队列
    Windows下如何自定义窗体控件
    金山卫士UI原理解析(1)
    WTL学习笔记(4)控件加强
    WTL学习笔记(5)系统皮肤管理
    小笨开始冬眠了:)
    送时尚数码展门票
  • 原文地址:https://www.cnblogs.com/hjx-blog/p/6498078.html
Copyright © 2020-2023  润新知