我爱编程

Angular理解

2016-07-29  本文已影响375人  郑伟的菜园子

什么是UI

对于一个用户界面,它实际上包括三个主要部分:

模块

angular.module(abc'') 引用模块abc
angular.module('abc',[]) 定义模块abc

作用域

凡是上级scope拥有的属性,都可以从下级scope读取,但是当需要对这些继承下来的属性进行写入的时候,问题就来了:写入会导致在下级scope上创建一个同名属性,而不会修改上级scope上的属性。

视图

展示动态信息有两种:

指令

指令相当于一个自定义的HTML元素,在angular官方称它为HTML语言的DSL扩展
按照指令的使用场景和作用可以分为两种类型的指令:组件型和装饰型。

组件型相当于把一个页面按功能点拆分成多个模块。

装饰型指令是为DOM添加行为,使其具有某种能力,如自动聚焦、双向绑定、可点击(ngClick)、条件显示、隐藏(ngShow,ngHide)等能力。同时它也是链接Model和View之间的桥梁,保持view和Model的同步。在angular中的大部分的指令属于装饰型指令,它们负责收集和创建$watch,然后利用angular脏检查机制保持view的同步。

组件型指令

angular.module('com.ngnice.app').directive('jobCategory',function(){
    return {
        restrict:'EA',
        scope:{
            configure:'='//独立作用域
        },
        templateUrl:'a.html',
        //声明指令的控制器
        controller:function($scope){
            
        }
    }
});

restrict属性用来表示这个指令的应用方式,它的取值可以是E(元素)、A(属性)、C(类名)、M(注释)这几个字母的任意组合,工程实践中常用的是E、A、EA这三个,对于C、M不建议使用。

scope有三个取值:不指定(undefined)/false/true或一个哈希对象。
不指定或者为false时,表示这个指令不需要一个新的作用域。它直接访问现有的作用域上的属性和方法,也可以不访问作用域。同一节点上有新作用域或独立作用域指令,则直接用它,否则直接使用父级作用域。
为true时,表示它需要一个新作用域。
为哈希对象时,表示它需要一个独立作用域。

{
    name:'@',//绑定字面量
    details:'=',//绑定变量
    onUpdate:'&'//绑定事件
}

使用方法如下:

<user-details name='test' details='details' on-update='updateIt(times)'></user-details>

对于组件型指令,更重要的是内容信息的展示,所以一般不涉及到指令的link函数,而是应该尽可能的将业务逻辑放置在controller中。

angular
    .module('com.ngnice.app')
    .directive('twTitle',function(){
        return {
            //作用域
            restrict:'A',
            link:function(scope,element,attrs){
                
            }
        }
    });

装饰器型指令主要用于添加行为和保持View和Model的同步,所以它不同于组件型指令,我们经常需要进行DOM操作。其restrict属性通常是A,也就是属性声明方式,这比较符合装饰器的语义:它并不是一个内容的主体,而是附加行为能力的连接器。

理解 MVVM

$scope可以看作ViewModel,而controller则是装饰、加工处理这个ViewModel的JavaScript函数。

mvvm.png

在angular中MVVM模式主要分为四部分:

webstorm中的angular如何使用

上一篇 下一篇

猜你喜欢

热点阅读