今天在闲暇时间再次对angularjs的指令进行了初探,不探不知道一探吓一跳啊, 就一个简单的指令整整难住我了两个小时,先不说代码的逻辑是否复杂,就一些内部的一些实现让我看起来都是头疼的不行啊,不过最终还是解决了 下面就来告诉大家angularjs的指令简单的运行过程,angularjs内置了大量的指令,看似简单却又复杂的不行,一旦深究你就会像染上毒瘾一样无法自拔啊,这也就是通常所说的强迫症,哈哈,下面就给大家附上今天的成功.

  今天说实在的也没有写什么东西,就是对指令做了初步的学习,首先看html代码:

<div style="background: yellow">
<super strength>动感超人----力量</super>
</div>
<div style="background: blue">
<super strength speed>动感超人----力量,速度</super>
</div>
<div style="background: red">
<super strength speed light>动感超人----力量,速度,敏捷</super>
</div>

  这些似乎也没有什么  不过对于像我一样的初学者似乎会满脸懵逼,那么我就稍微给大家解释下哈, 这里的super,strength,speed,light都是一些自定义的元素和属性,也就是对指令做了初始化,而在js代码中则是对指令做了定义,随之而来的便是js代码:

var app = angular.module('derApp', []);
var a;
app.directive('super', function () {
return {
scope:{},//这个是独立作用域,与父作用域毫无关系,scope:true,这种形式的是继承了父作用域,可以引用父作用域中的属性
restrict: 'AE',//A:代表的是属性E:代表的是元素,angular推荐使用A和E
controller:function($scope){//controller 创建一个控制器,他会暴露一些api,利用这个api可以在多个指令之间进行通信
$scope.ary = [];
this.addStrength = function(){
$scope.ary.push('strength');
a=$scope.ary;
};
this.addSpeed = function(){
$scope.ary.push('speed');
a=$scope.ary;
};
this.addLight = function(){
$scope.ary.push('light');
a=$scope.ary;
};
},
link:function(scope, element, attrs){//使用编程的方式修改最终成成的dom元素实例,添加事件监听,并设置数据绑定
element.bind('mouseenter',function(){
console.log(scope.ary);
console.log(a);
})
}
};
})
app.directive('strength', [function () {
return {
require:'^super',//require '^super'说明该指令依赖于上面的super指令当其存在时间才可以正常运行否则会报错
restrict: 'AE',
link: function (scope, element, attrs,superCtrl) {
superCtrl.addStrength();
}
};
}])
app.directive('speed', [function () {
return {
require:'^super',
restrict: 'AE',
link: function (scope, element, attrs,superCtrl) {
superCtrl.addSpeed();
}
};
}])
app.directive('light', [function () {
return {
require:'^super',
restrict: 'AE',
link: function (scope, element, attrs,superCtrl) {
superCtrl.addLight();
}
};
}])

  首先现初始化了模块,然后定义了super指令,这个指令可以作为其他指令的父指令,从而实现指令的复用,当我写到这里时间,遇到了一个困扰我很久的问题,那就是不知道为什么当鼠标moouseenter时间为什么会console出不同的值,后来终于明白了,他的意义再于,js中定义了super指令,而html中声明了三个super 也就是意味这有三个super指令,这样就存在了三个独立作用域,至于为什么在第二个super上面会console出两个元素那是因为上面又定义了两个属性strength和speed这样就又执行了这两个指令,从而往scope.ary中push了两个元素哈哈,于是乎现在重于解决了,从这个问题看来,总结出一句话,技术达不到,不要瞎胡闹,还是要老老实实一步一个脚印的学习,这样才会飞的更高,下面放上项目连接哈:https://jsfiddle.net/htan72eb/ 注意这个项目要想查看效果必须打开控制台看输出 ,好了今天的分享就到这里,有不懂的地方可以追问哈

angular指令浅谈的更多相关文章

  1. AngularJS进阶(二十五)requirejs + angular + angular-route 浅谈HTML5单页面架构

    requirejs + angular + angular-route 浅谈HTML5单页面架构 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又 ...

  2. Angular.js浅谈

    至今博主对于MVVM框架比较了解的就只能算有Angular了,首先给大家明确一个概念,Angular1.x才能叫Angular.js,而Angular2.4.5都直接叫Angular了,因为从2开始已 ...

  3. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

  4. 浅谈HTML5单页面架构(一)——requirejs + angular + angular-route

    心血来潮,打算结合实际开发的经验,浅谈一下HTML5单页面App或网页的架构. 众所周知,现在移动Webapp越来越多,例如天猫.京东.国美这些都是很好的例子.而在Webapp中,又要数单页面架构体验 ...

  5. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  6. 浅谈Vue.js

    作为一名Vue.js的忠实用户,我想有必要写点文章来歌颂这一门美好的语言了,我给它的总体评价是“简单却不失优雅,小巧而不乏大匠”,下面将围绕这句话给大家介绍Vue.js,希望能够激发你对Vue.js的 ...

  7. 关于AngularJS学习整理---浅谈$scope(作用域) 新手必备!

    作为初次接触 AngularJS的新手,想要深层理解里面的内容短时间还是不可能的,所以标题写了浅谈字样,以下内容是参考各位大神以及相关书籍整理加个人理解,出现错误的地方请大家指正. $scope(作用 ...

  8. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  9. 浅谈Hybrid技术的设计与实现第二弹

    前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) ...

随机推荐

  1. 苹果新政,禁止开发者在App中加入检查更新功能

    今天妥妥的被拒了,苹果更新了新政策,不能在应用中出现检测更新的功能.AppStore会自动提醒用户更新. 去掉更新按钮,之后再尝试下看能通过不能

  2. BOM和DOM详解

    DOM介绍 D(文档)可以理解为整个Web加载的网页文档,O(对象)可以理解为类似window对象只来的东西,可以调用属性和方法,这里我们说的是document对象,M(模型)可以理解为网页文档的树形 ...

  3. mysql报Fatal error encountered during command execution的解决办法

    连接字符串里加上 Allow User Variables=True 解决. 否则时不时的报错,存储过程名长一点也报错,又有时报有时不报,参数传1位数就正常2位数就报错等…… 折腾mysql蛋疼啊

  4. thinkphp action.class.php 学习

    控制器类(Action) 描述 Description ThinkPHP Action控制器基类 抽象类 位置:ThinkPHP/Lib/Core/Action.class.php 声明: abstr ...

  5. Linux文本操作三大利器总结:sed、awk、grep

    grep:(去除一行中需要的信息,同类与cut) grep全称是Global Regular Expression Print #常规用法 # grep -n root /etc/passwd :ro ...

  6. es6整理

    1.const和let let类似于var,不同的是let只在所在的代码段有效 for循环的计数器,就很合适使用let命令. let和var的区别: //变量i是var声明的,在全局范围内都有效.所以 ...

  7. Activity完整的生命周期

    首语:群里看到一位网友说:你能说出Activity的完整生命周期吗?看到这句话,我也在反思自己,我也是个fresh,所以想找个时间仔细的扒一扒Activity生命周期. 首先拿一张简单而又复杂的生命周 ...

  8. Scut 进阶:Schema 自动检测

    Scut 在启动时有一个自动根据代码中数据类型检查数据库字段的功能,要如何使用呢? 脚本引擎动态加载 ModelAssembly: ScriptEngine.cs - InitScriptRuntim ...

  9. codevs 3269 混合背包

    题目描述 Description 背包体积为V ,给出N个物品,每个物品占用体积为Vi,价值为Wi,每个物品要么至多取1件,要么至多取mi件(mi > 1) , 要么数量无限 , 在所装物品总体 ...

  10. codevs 1153 道路游戏

    传送门   题目描述 Description 小新正在玩一个简单的电脑游戏.游戏中有一条环形马路,马路上有n 个机器人工厂,两个相邻机器人工厂之间由一小段马路连接.小新以某个机器人工厂为起点,按顺时针 ...