angular基础

接触angular已经近半年了,一直在用别人的指令改改,遇到了很多自己解决不了的坑,其实自己对angular的各部分了解并不多,现在回头来弄清其中的用法原理,打好自己的基础。

准备从如下几个部分展开,每个部分放出参考文章链接以及代码仓库地址

tisps

1.module.run()方法在注射器加载完所有模块是执行一次

指令

git

先记几个核心问题
1.指令的运行原理:comile与link(操作元素,添加CSS样式,绑定事件)
2.指令与控制器之间的交互
3.指令间的交互
4.scope的类型与独立scope
5.scope的绑定策略
6.angularjs内置指令(63)
7.Expander,Accordion
8.directive思想的起源和原理概述

指令有三个阶段

1.加载阶段>>>2.编译阶段>>>3.链接阶段

1.加载angular.js,找到ng-app指令,确定应用的边界

2.遍历DOM,找到所有指令;根据指令代码中的temlate,replace,transclue转换DOM结构;如果存在compile函数则调用;

3.对每一条指令运行link函数;link函数一般用来操作DOM,绑定事件监听器;

compile函数用来对模板自身进行转换,而link函数负责在模型和视图之间进行动态关联;
作用域在链接阶段才会被绑定到编译后的link函数上;
compile函数仅仅在编译阶段运行一次,而对于指令的每个实例,link函数都会执行一次;
compile可以返回preLink和postLink函数,而link函数只会返回postLink函数;
如果需要修改DOM结构,应该在postLink中来做这件事,而如果在preLink中做这件事会导致错误;
大多数时候我们只要写link函数即可

配置含义

练习指令时偶尔发现安装的sublime插件自动补全,如下格式

app.directive('', ['', function(){
// Runs during compile
return {
    // name: '',
    // priority: 1,
    // terminal: true,
    // scope: {}, // {} = isolate, true = child, false/undefined = no change
    // controller: function($scope, $element, $attrs, $transclude) {},
    // require: 'ngModel', // Array = multiple requires, ? = optional, ^ = check parent elements
    // restrict: 'A', // E = Element, A = Attribute, C = Class, M = Comment
    // template: '',
    // templateUrl: '',
    // replace: true,
    // transclude: true,
    // compile: function(tElement, tAttrs, function transclude(function(scope, cloneLinkingFn){ return function linking(scope, elm, attrs){}})),
    link: function($scope, iElm, iAttrs, controller) {
        
    }
};
}]);

对各个属性都有注释,做个参考吧

replace

replace 属性为 true 时,指令标签会被 templete中的内容替换掉,如

var appModule = angular.module('app', []);
appModule.directive('hello', function() {
return {
    restrict: 'E',
    template: '<div>Hi there</div>',
    replace: true
};
});

打开浏览器调试工具只能看到<div>Hi there</div>

transclude

值为true时保留指令包裹的内容

scope

作用域,用来隔离指令与所在控制器间的作用域、隔离指令与指令间的作用域

参考资料

1.学习例子参考大漠老师的5个实例详解指令机制

2.angular指令的transclude选项以及ng-transclude指令

3.directive和controller通信

服务

angular核心

angular原理