angularjs中$parse的用法
转载自:https://umur.blog/2014/02/25/advanced-angular-parse/
高级Angular:$ parse
如果你想加强你的AngularJS知识,$ parse是你应该了解的最重要的服务之一。它被用于大多数指令中,为您提供了一系列新的可能性。
那么,它做了什么?让我们从一个众所周知的地方开始:ngClick。
ngClick指令,接受表达式,并在单击指令元素时执行表达式。那么,它在内部如何运作?是的,你猜对了:用$ parse。
$ parse接受一个表达式,并返回一个函数。当您使用上下文(稍后将详细介绍)作为第一个参数调用返回的函数时,它将使用给定的上下文执行表达式。
它将使用给定的上下文执行表达式。
就$ parse而言,Context是一个纯粹的javascript对象。表达式中的所有内容都将在此对象上运行。
让我们看一个例子:
|
1
2
3
4
五
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
function MyService($parse) { var context = { author: { name: 'Umur'}, title: '$parse Service', doSomething: function (something) { alert(something); } }; var parsedAuthorNameFn = $parse('author.name'); var parsedTitleFn = $parse('title'); var parsedDoSomethingFn = $parse('doSomething(author.name)'); var authorName = parsedAuthorNameFn(context); // = 'Umur' var parsedTitle = parsedTitleFn(context); // = '$parse Service' var parsedDoSomething = parsedDoSomethingFn(context); // shows you an alert 'Umur'} |
所以这很酷,我们可以安全地评估带有上下文的字符串。让我们编写一个非常基本的myClick指令。
|
1
2
3
4
五
6
7
8
9
10
11
12
13
14
15
|
angular.module('my-module', []) .directive('myClick', function ($parse) { return { link: function (scope, elm, attrs) { var onClick = $parse(attrs.myClick); elm.on('click', function (e){ // The event originated outside of angular, // We need to call $apply scope.$apply(function () { onClick(scope); }); }); } }}); |
看,纯javascript对象结果是我们的范围!
这有效,但是如果你看一下ngClick的文档,它就可以让我们向函数注入$ event对象。这是怎么发生的?这是因为解析的函数接受可选的第二个参数用于附加上下文。
我们可以在点击回调中访问事件对象,我们可以通过它。
|
1
2
3
4
五
6
7
8
9
10
11
12
13
14
15
|
angular.module('my-module', []) .directive('myClick', function ($parse) { return { link: function (scope, elm, attrs) { var onClick = $parse(attrs.myClick); elm.on('click', function (e){ // The event originated outside of angular, // We need to call $apply scope.$apply(function () { onClick(scope, {$event: e}); }); }); } }}); |
用法:
|
1
2
|
<a href="" ng-click="doSomething($event.target)">link</a> |
奖金
如果您不需要传递其他上下文,则可以保存一些字节并删除代码。这是一种更酷的方式。如何运作留给读者。如果您认为自己找到答案,请发表评论!
|
1
2
3
4
五
6
7
8
9
10
11
|
angular.module('my-module', []) .directive('myClick', function ($parse) { return { link: function (scope, elm, attrs) { var onClick = $parse(attrs.myClick); elm.on('click', function (e) { scope.$apply(onClick); }); } }}); |
angularjs中$parse的用法的更多相关文章
- AngularJS select中ngOptions用法详解
AngularJS select中ngOptions用法详解 一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...
- AngularJS中forEach的用法
AngularJS中当我们需要遍历某个数组的时候,我们会用到forEach语法.AngularJS中forEach的用法如下: angular.forEach(array,function(obj,i ...
- 浅谈AngularJS的$parse服务
$parse 作用:将一个AngularJS表达式转换成一个函数 Usage$parse(expression) arguments expression:需要被编译的AngularJS语句 retu ...
- angularJS的MVC的用法
1.前端MVC: M:Model,数据库 V:HTML页面 C:Control控制器 比较很有名的前端MVC框架:ExtJs 2.angularJS的MVC框架搭建 index.html代码如下: & ...
- JSON.stringify和JSON.parse的用法
用法概述 所有的现代浏览器都支持 JSON 对象,有两个非常有用的方法来处理 JSON 格式的内容: JSON.parse(string) 接受一个 JSON 字符串并将其转换成一个 JavaScri ...
- 将字符串转化为数字(Convert和Parse的用法)
字符串必须是数字,不要超过转换成目标数字类型的范围.超过的话系统也会报错(溢出). static void Main(string[] args) { string s; int i; Console ...
- AngularJs之ng-repeat的用法
可参考文章:http://blog.csdn.net/renfufei/article/details/43061877 ng-repeat信息展示的核心: [1]异步读取数据源 works,见代码一 ...
- 夺命雷公狗—angularjs—5—ng-switch的用法实现下拉更换板块的实现
这个方法一般都会是和别的块状元素进行绑定同时使用的,废话不多说,直接上代码: <!doctype html> <html lang="en"> <he ...
- [AngularJS] Using $parse Service
$parse is useful when you want to parse an expression and the context is not defined yet. For exampl ...
随机推荐
- AngularJS入门篇
AngularJS是一个JavaScript框架,它通过指令扩展了HTML,且通过表达式绑定数据到 HTML.顺便一提,什么是框架?比如struts2.spring.hibernate.thinkph ...
- Ubuntu14.04下GAMIT10.6的安装
#安装步骤将ubuntu切换到root用户权限 1 $sudo -s ##安装必要软件 1 2 3 4 5 $ apt-get install gcc $ apt-get install gfortr ...
- sycPHPCMS v1.6 cookie sqlinjection
./user/index.php include "../include/conn.php"; include "../include/function.php" ...
- 为何滴滴会走Uber之路,研发无人驾驶?
近日,滴滴出行宣布完成新一轮超过55亿美元融资,以支持其全球化战略的推进和前沿技术领域的投资.其中,无人驾驶汽车将是这笔资金重要的投资方向.此前,滴滴在全球范围内的追赶对象Uber不断在无人汽车领域发 ...
- POI之下载模板(或各种文件)
该例基于Nutz框架 前台代码: <a href="" id="errordownload" onclick="downloadErrorLog ...
- ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合
Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...
- qt creator源码全方面分析(3)
目录 项目文件分析 qtcreator.pro 包含qtcreator.pri Qt版本判断 包含doc.pri 源码组织架构 指定dist文件列表 qbs配置 指定架构和平台 指定基础名 指定lin ...
- 微信小程序状态管理工具 JStore
微信小程序状态管理工具 JStore 闲着没事做,就想着给微信小程序写一个状态管理工具,名叫 JStore,这个状态管理工具是仿照 vuex 的几个方法来写的,所以有 vuex 的基础同学很容易理解. ...
- objectarx 填充的分割
主要思路:找到填充边界集合:vecBo,然后把面积最大的边界找出来:bo1,用分割曲线和bo1通过boundary命令构成两个新的最大封闭边界,左边的记为 boLeft(红色部分),右边的记为boRi ...
- Everything-快速找到你的文件,电脑前的你值得拥有
如果你也是一位电脑使用者,那么你可以考虑下载这个"Everything". Everything是一款非常非常强大的软件.相信不少电脑用户,特别是Windows用户,都尝试使用过W ...