`
weitao1026
  • 浏览: 1057074 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多
代码实现
原理讲完再简述一下实现吧
下载js文件,引入到index.html文件中。
在html中,添加注入位置: <div ui-view="">。它是当被触发注入时,填充的位置。
在html中,添加触发器:<ANY ui-sref="XXX">。XXX是$state,它遵循xxx.xxx的树形结构,渲染时从根节点开始渲染。
在app.js中,配置路由函数 .config(function($stateProvider, $urlRouterProvider) {});

scope是angularJS中的作用域(其实就是存储数据的地方),很类似javascript的原型链 。搜索的时候,优先找自己的scope,如果没有找到就沿着作用域链向上搜索,直至到达根作用域rootScope。

  $rootScope是由angularJS加载模块的时候自动创建的,每个模块只会有1个rootScope。rootScope创建好会以服务的形式加入到 $injector中。也就是说通过 $injector.get("$ rootScope ");能够获取到某个模块的根作用域。更准确的来说,$rootScope是由angularJS的核心模块ng创建的。

  scope是html和单个controller之间的桥梁,数据绑定就靠他了。rootscope是各个controller中scope的桥梁。用rootscope定义的值,可以在各个controller中使用


1、event
这里可以有两种方式,一种是$scope.$emit,然后通过监听$rootScope的事件获取参数;另一种是$rootScope.$broadcast,通过监听$scope的事件获取参数。
这两种方法在最新版本的Angular中已经没有性能区别了,主要就是事件发送的方向不同,可以按实际情况选择。

2、service
可以创建一个专用的事件Service,也可以按照业务逻辑切分,将数据存储在相应的Service中,因为已经有人提过了就不赘述了。

3、$rootScope
这个方法可能会比较dirty一点,胜在方便,也就是把数据存在$rootScope中,这样各个子$scope都可以调用,不过需要注意一下生命周期

4、直接使用$$nextSibling及类似的属性
类似的还有$scope.$parent。这个方法的缺点就更多了,官方不推荐使用任何$$开头的属性,既增加了耦合,又需要处理异步的问题,而且scope的顺序也不是固定的。不推荐

这是个啥?
ui-router是一个web客户端的路由解决方案。我觉得它最大的作用是将web界面的设计分块了。
分块分层
最初的web访问模型,是这样的: 

我们访问page1,然后访问page2....
在新的模型中它变成了这个样子: 

访问效果是一样的,但是从设计上已经有了变化。它变成了:只有一张网页,在网页中有不同的区域,每个区域都可擦写。仔细想想好像也挺常见的,不知道其他技术是不是也这样
代码实现
原理讲完再简述一下实现吧
下载js文件,引入到index.html文件中。
在html中,添加注入位置: <div ui-view="">。它是当被触发注入时,填充的位置。
在html中,添加触发器:<ANY ui-sref="XXX">。XXX是$state,它遵循xxx.xxx的树形结构,渲染时从根节点开始渲染。
在app.js中,配置路由函数 .config(function($stateProvider, $urlRouterProvider) {});
细说一下:
引入代码
没啥要细说的,要说就是路径别写错吧 。
注入位置
对于多个分栏的结构,可以使用多个view的实现,然后反过来在config中使用bbb@AAA的声明指定本state中子view对应的模板,例如:
//in js
$stateProvider
    .state('index', {
        url: '/index',
        views: {
            '': {
                templateUrl: 'tpls/index.html'
            },
            'main1@index': {
                templateUrl: 'tpls/form1.html'
            },
             'main2@index': {
                templateUrl: 'tpls/form2.html'
            }
        }
    })
   
//in html    
<div class="container">
    <div ui-view="main1"></div>
    <div ui-view="main2"></div>
</div>  
这个代码中将form1.html 和 form2.html 填充到了对应的的view中。
添加触发器
如果在标签中添加了 ui-sref="xxx",未激活状态时,它是看不到的。具体描述可以看下官网. 通常我们都是激活状态,但有时总想自己控制一下。可以参考:

<ul>
  <li ui-sref-active="active" class="item">
    <a href ui-sref="app.user({user: 'fansy'})">@fansy</a>
  </li>
</ul>

当user是fansy时,显示后面那行字。这个例子是官方的,我是没用明白这个功能,回头在研究吧。
配置路由
首先是 $urlRouterProvider
它通常用来配置非 $state 的额外的路由.例如:
$urlRouterProvider.when("","/home");
将默认页设置为/home的URL。注意哦,这里用的是URL,别写错成state了。
当然也可以写一个任何额外页面的定向:
$urlRouterProvider.otherwise("/home");
这样访问其他阿猫阿狗的页面,就都跑到/home那去了。
然后是 $stateProvider
触发点是按层级来的,它遵守的路由规则可以从官网的,这个页面 中找到。通过 $state.go 函数可以将状态位置强行切换,我们可以在任何一处写下面的js代码:
$state.go('home.state1');
另外,你也可以在$stateProvider 中对应的state里面配置controller,当这种state被激活,就会调用对应的函数了,例如:

$stateProvider
.state("home",{
url:"/home",
templateUrl:"tmpls/home.html",
controller:function($scope,$state) {
console.log("enter home");
}
})

每当状态变为home时,都输出一条日志。
最后,渲染是按层级来的。因此改变同级节点并不会重新渲染父节点。并且不改变状态就不会重新渲染。比如一直按同一个按钮,就不会重新渲染;没更改跟节点,点一个"刷新"按钮,也不会刷新整个页面
分享到:
评论

相关推荐

    AngularJS学习手册 源代码

    **AngularJS学习手册源代码详解** AngularJS,作为Google维护的一款强大的前端JavaScript框架,自2009年发布以来,已经在Web开发领域产生了深远影响。它通过MVC(Model-View-Controller)架构模式,提供了丰富的...

    JS AngularJS 学习笔记

    **AngularJS 框架详解** AngularJS 是一个强大的JavaScript框架,由Google维护,用于构建动态Web应用。它通过MVC(模型-视图-控制器...通过深入学习和实践,你可以有效地利用AngularJS构建高效、可维护的Web应用程序。

    angularJS_学习资料

    ### 四、AngularJs学习笔记 学习笔记通常包含个人对AngularJS理解的深入点,可能包括一些高级话题,如脏检查(Dirty Checking)、$digest循环,以及如何优化性能。笔记可能还包括解决常见问题的方法,以及作者在...

    AngularJS学习 chm 文件

    AngularJS的学习资料众多,其中"AngularJS学习 chm 文件"是一个方便快捷的学习资源。 CHM文件,全称是Compiled HTML Help,是一种由Microsoft开发的帮助文件格式。它将HTML页面、索引和图像等资源打包在一起,形成...

    AngularJS学习笔记

    ### AngularJS学习笔记知识点解析 #### 一、AngularJS简介 AngularJS是由Google推出的一款JavaScript库,虽然在本文档中作者将其称为“工具”,但实际上它更接近于一个完整的前端开发框架。AngularJS的设计理念...

    AngularJS 学习资料

    ### AngularJS 学习资料详解 #### 一、AngularJS简介与重要性 AngularJS是一种广泛使用的开源前端JavaScript框架,由Google维护。它主要用于构建单页面应用(SPA),通过简化客户端和服务器之间的交互来提高用户...

    AngularJS学习

    AngularJS是google在维护,其在国外已经十分火热,可是国内的使用情况却有不小的差距,参考文献/网络文章也...这里便将我学习AngularJS写成文档,一方面作为自己学习路程上的记录,另一方面也给有兴趣的同学一些参考。

    angularjs学习笔记

    **AngularJS学习笔记** AngularJS,作为一款强大的前端JavaScript框架,由Google维护,主要用于构建单页应用程序(SPA)。它的核心特性包括数据绑定、依赖注入、模块化和指令系统,极大地简化了网页应用的开发流程...

    angularJS学习资料总结

    这个压缩包包含了AngularJS学习的全链条资料,无论你是初学者还是有一定经验的开发者,都能从中受益。通过系统学习和实践,你将能够熟练掌握AngularJS,构建出功能强大、用户体验优良的Web应用。

    学习AngularJS-1.x.pdf

    AngularJS学习指南 AngularJS是一个流行的前端JavaScript框架,用于构建复杂的Web应用程序。下面是学习AngularJS的关键知识点: 一、环境准备 * 安装Node.js和npm * 安装AngularJS * 创建和配置AngularJS项目 ...

    angularJs学习文档

    AngularJS 是一个 JavaScript框架。它是一个以 JavaScript 编写的库。它可通过 [removed] 标签添加到HTML 页面。 AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML。 AngularJS 是以一个 JavaScript...

    AngularJs学习笔记.docx

    ### AngularJS 学习笔记 #### 一、AngularJS 概述 AngularJS 是一个用于构建动态Web应用的开源框架,由 Google 维护。它通过扩展 HTML 的功能来简化 Web 开发,并允许开发者以声明式的方式编写代码,极大地提高了...

    angularjs学习需要导入的angular.js

    angularjs学习需要导入的angular.js

    angularjs学习资料

    AngularJS,是由Google...总之,这个压缩包中的资料是一个全面的AngularJS学习资源库,无论你是初学者还是有一定经验的开发者,都能从中找到有价值的信息,提升你的AngularJS技能。祝你在学习的道路上取得丰硕的成果!

    AngularJs学习笔记1

    【AngularJS学习笔记1】 AngularJS 是一个强大的前端JavaScript框架,用于构建动态Web应用程序。它通过数据绑定和依赖注入简化了HTML页面与JavaScript代码之间的交互。这篇笔记将深入探讨AngularJS的一些基本概念,...

    AngularJS学习手册|Angular手册下载

    在《AngularJS学习笔记.chm》中,读者可以期待找到关于这些概念的深入解释,包括如何创建AngularJS项目,设置模块,编写控制器,使用指令,以及进行数据绑定和依赖注入的实例。此外,还可能涉及如何调试、优化...

    AngularJS 学习笔记.pdf

    总而言之,这份AngularJS的学习笔记为初学者提供了一个由浅入深、涵盖AngularJS基础知识和核心概念的全面指南。通过对这份笔记的学习,初学者可以逐步掌握AngularJS的使用,从而有效地进行前端开发。

    ANGULARJS学习总结.pdf

    AngularJS学习总结 AngularJS是一款功能强大且流行的前端JavaScript框架,用于构建复杂的Web应用程序。通过学习AngularJS,可以快速熟悉前端编程,实现快速开发高质量的Web应用程序。 一、引入AngularJS 要使用...

Global site tag (gtag.js) - Google Analytics