angular瞎复习

因为公司有几个老的项目都是由我维护和优化的,那几个项目都是用到angular1.x的版本,所以最近也在复习angular一些旧的知识,可能理解的还不够.

$semit $broadcast $on

$semit 子传父 $broadcast父传子 和$on监听或接收数据
$semit 和 $broadcast 需要触发调用,$on可以直接使用

自定义指令

app.directive("hello",function () {
    return{
        restrict:"EA",   //这里固定大写常用的是EA,e就是标签,a就是属性
        template:"<h1>我就是hello</h1>",   //不加url就是片段,加url就是路径
        replace:true,   //是否替换
        scope:{
            
        }  //独立作用域
    }
});

自定义指令上的传递数据 @ = &

app.directive("hello",function () {
    return{
        restrict:"EA",   //这里固定大写常用的是EA,e就是标签,a就是属性
        template:"<h1>我就是hello</h1>",   //不加url就是片段,加url就是路径
        replace:true,   //是否替换
        scope:{
            data:"@"  //把当前属性作为字符串传递,可以绑定外层的scope的值,在属性中插入{{}}即可
            data:"="  //可以双向绑定父scope的属性,不用加{{}}
            data:"&"  //传递父scope上面的一个函数
        }  //独立作用域
    }
});

ng-transclude

html:

<hello><p>我是hello原本的东西</p></hello>

js:

app.directive("hello",function () {
    return{
        restrict:"EA",
        transclude:true,  //保留标签原有内容
        template:"<div>我是替换的内容<div ng-transclude></div></div>",

    }
});

$templateCache把模板缓存起来

var app = angular.module("app",["ui.router"]); //创建模块并且引入ui.router
//配置一个路由块
app.run(function ($templateCache) {
    $templateCache.put("hello","<div>hello everyone!!!!</div>") //把模板缓存,命名为hello
});

app.directive("hello",function ($templateCache) {
    return{
        restrict:"EA",
        template:$templateCache.get('hello'), //从缓存获取hello
        replace:true
    }
});

指令的三个阶段

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

2 编译阶段 遍历dom节点,找到所有的指令,根据指令代码中的template,replace,transclue转换dom结构,如果存在compile函数会调用

3 连接阶段 运行每条指令的link函数,可以在link里面操作dom节点,其他地方尽量不要,绑定事件

在link阶段绑定事件:

html:

<hello><p>我是hello原本的东西</p></hello>

js:

var app = angular.module("app",["ui.router"]); //创建模块并且引入ui.router
//配置一个路由块

app.controller("appController",["$scope",function ($scope) {
    $scope.tell = function () {
        console.log("aaaa");
    }
}]);

app.directive("hello",function () {
    return{
        restrict:"EA",
        link:function (scope,element,attr) {  //attr可以获取到指令上面的属性
            element.on("mouseenter",function () {
                scope.tell(); //直接调用
                scope.$appyl("tell()"); //通过$apply调用
            })
        },
        controller:"appController"
    }
});

$scope和$rootscope

$scope是一个的对象,$scope提供了一些属性和方法,也可以在$scope上面添加一些属性的方法,$scope是一个作用域,是一个树型结构,和dom平行,子$scope可以继承父$scope上面的属性和方法.

$rootscope 是angular模型上的根对象,一个angular对象上只有一个跟对象

路由

ngRoute

html:

<div ng-view></div> //路由视图

js:

var app = angular.module("app",["ngRoute"]);
//配置一个路由块
app.config(function ($routeProvider) {
    $routeProvider.when("/p1",{
        templateUrl:"view/p1.html", //带上url就可以填入网页地址,不带上url就是填入html片段
        controller:"p1Controller"  //这个页面的控制器
    }).when("/p2",{
        templateUrl:"view/p2.html",
        controller:"p2Controller"
    }).otherwise({  //其余情况都指向/p1
        redirectTo:"/p1"
    })
});

ui-router

html:

<div ui-view></div>
<div ui-view="123"></div>
<div ui-view="456"></div>

js:

var app = angular.module("app",["ui.router"]); //创建模块并且引入ui.router
//配置一个路由块
app.config(["$stateProvider","$urlRouterProvider",function ($stateProvider,$urlRouterProvider) {
    $stateProvider.state("p1",{
        url:"/p1",  //路由地址
        views:{
            "":{    //view的名称,空就是ui-view
                templateUrl:"view/p1.html"
            },
            "123":{  //ui-view='123'
                templateUrl:"view/p2.html"
            },
            "456":{  //ui-view='456'
                template:"<h1>456</h1>"
            }
        }
    });
    $urlRouterProvider.otherwise("/p1");
}]);

ui-sref可以给标签绑定哈希,点击该便签会给浏览器带上哈希使路由跳转

数据绑定"{{}}" "ng-bind"

用"{{}}"双括号语法实现数据展示和
ng-bind 实现数据绑定不会出现"{{}}"

首页一般使用ng-bind,其他地方可以使用双括号语法,双括号语法也有办法加载的时候不会出现闪烁,使用ng-cloak,在style里面加上[ng-cloak]{display:none}就可以了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • AngularJS是什么?AngularJs(后面就简称ng了)是一个用于设计动态web应用的结构框架。首先,它是...
    200813阅读 1,583评论 0 3
  • 通过AngularJS仿豆瓣一刻的案例:https://github.com/zhongxiaolian/doub...
    中小恋阅读 1,749评论 1 21
  • Angular面试题 一、ng-show/ng-hide与ng-if的区别? 第一点区别是,ng-if在后面表达式...
    w_zhuan阅读 5,515评论 0 26
  • 1.类库( 提供类方法 ) 和框架 类库提供一系列的函数和方法的合集,能够加快你写代码的速度。但是主导逻辑的还是自...
    w_zhuan阅读 1,784评论 0 8
  • 你以为凭你的勤奋就能跟命运换一碗鸡汤?别幼稚了,其实它只会冲你笑笑,然后熟练地泼你一脸狗血! 从祖国的花骨朵到人间...
    清晨社阅读 350评论 3 5