AngularJS语法详解(续)

AngularJS语法详解(续)
src和href属性

在Angularjs,src应该写成ng src和href应该写成ng href,例如:

复制代码代码如下所示:
一些文字
表达

你可以做数学题,简单的比较运算、布尔运算、位运算、数组和对象的引用,符号,虽然我们可以使用表达式来做很多的模板的东西,但表达的是使用一个自定义的解释器执行(一角),而不是使用Javascript的eval()函数,局限性。

虽然许多表达式比Javascript更严格,但对于未定义的和空的,它们具有更好的容错能力。如果发生错误,模板不显示,但不是一个NullPointerException错误。例如:

复制代码代码如下所示:
{计算机( 10)}虽然是合法的,但它将业务逻辑放在模板中,应该避免这种做法。
区分UI和控制器的职责
控制器绑定到特定的DOM片段,这是他们需要管理的。一个是由NG控制器在模板中声明的。二是绑定一个动态加载DOM模板片段的路由,即视图,控制器可以创建嵌套的,他们可以通过继承的几种结构,共享的数据模型和功能正确的嵌套发生的范围对象,原始的继承机制母控制器对象的范围内将被转移对内部嵌套的范围(所有属性,包括功能)。例如:

复制代码代码如下所示:

使用范围风暴泄漏模型数据
美元范围性质的创作,如scope.count美元= 5,可以显示,数据模型也可以通过模板本身间接创造。

通过expression.for例子

复制代码代码如下所示:

将计数设置为三
在窗体项目中使用NG模型
与表达式类似,NG模型上指定的模型参数也在外层控制器中工作,唯一的区别是它在表单项和指定模型之间创建双向绑定关系。

使用表监视数据模型中的更改
为表功能的签名是:看(watchfn美元,watchaction,deepwatch)

一个watchfn是一个角表达式或函数返回的监测数据model.watchaction电流值是一个字符串的函数或表达式,是watchfn变化的函数签名时调用:

如果函数(价值、属性的旧值,范围)deepwatch设置为true,可选布尔参数命令检查是否被监控对象的每个属性改变了角。如果你控制元素的数组,或所有的属性的对象,而不是一个值,监视一个简单的值,你可以使用此参数。注意角需要遍历数组或对象,如果是大的,然后操作复杂、重量更重。

函数的作用是:返回一个函数,当你不需要接收更改通知时,你可以用这个返回函数注销监视器。

如果我们需要监控属性并注销的监测,我们可以使用以下代码:VAR德雷格= $(美元范围。看'somemodel。一定的,callbackonchange())。

…注销();

示例代码如下所示:

复制代码代码如下所示:
您的购物车
函数的CartController(范围){

scope.bill美元= { };

scope.items美元= {

{标题:'paint罐,数量:8,价格:3.95 },

{标题:'polka点,数量:17,价格:12.95 },

{标题:'pebbles,数量:5,价格:6.95 }

};

scope.totalcart美元=函数(){

var总= 0;

对于(var i = 0,len = $ scope.items.length;我< len;i++){

合计=总金额+范围。项目{价格}范围。项目{数量;

}

总收益;

}

scope.subtotal美元=函数(){

返回的scope.totalcart()$ scope.bill.discount;

}

功能calculatediscount(价值、属性的旧值,范围){

scope.bill.discount美元=价值> 10010:0;

的watchaction功能} / /这里

美元美元(美元scope.totalcart范围看,calculatediscount); / /手表的功能在这里。

}
{项目名称} }
{ { } } | item.price货币

{ { item.price * item.quantity货币} } |
总:{ { totalcart(货币)| } }

折扣:{ { } } | bill.discount货币

小计:{ {小计(货币} })|
手表上面有一个性能问题,而calculatetotals功能已经执行了6次,其中三是由于糟糕的,每个周期,并将数据重新渲染。

下面是改进的代码

复制代码代码如下所示:
您的购物车
函数的CartController(范围){

scope.bill美元= { };

scope.items美元= {

{标题:'paint罐,数量:8,价格:3.95 },

{标题:'polka点,数量:17,价格:12.95 },

{标题:'pebbles,数量:5,价格:6.95 }

};

无功totalcart =函数(){()

var总= 0;

对于(var i = 0,len = $ scope.items.length;我< len;i++){

合计=总金额+范围。项目{价格}范围。项目{数量;

}

scope.bill.totalcart美元=总;

scope.bill.discount美元=总> 10010:0;

scope.bill.subtotal =总scope.bill.discount美元美元;

}

美元美元('items范围看,totalcart,true);随着项目的变化看 / /

}
{项目名称} }
{ { } } | item.price货币

{ { item.price * item.quantity货币} } |
总:{ { } } totalcart |货币法案。

折扣:{ { } } | bill.discount货币

小计:{ { } } | bill.subtotal货币
对于一个大型系统的性能将数组,如果你只有重新计算票据资产每次页面上显示角会更好。通过与watchfn创造美元的手表的功能,我们可以这样做。

复制代码代码如下所示:

美元。

无功totalcart =函数(){()

var总= 0;

对于(var i = 0,len = $ scope.items.length;我< len;i++){

合计=总金额+范围。项目{价格}范围。项目{数量;

}

scope.bill.totalcart美元=总;

scope.bill.discount美元=总> 10010:0;

scope.bill.subtotal =总scope.bill.discount美元美元;

});
监视许多事情

如果您想监视多个属性或对象,并在其中任何一个更改时执行一个函数,那么您有两个基本选项

连接这些属性后监控值

把它们放在一个数组或对象,然后通过价值的deepwatch参数

结果如下:

在第一种情况下,如果你在A和B两属性的事物对象的范围,我需要被执行,当两属性变化()函数,你可以监控范围两美元美元('things性质看,+的东西。B,我打电话(…));

当列表很长时,您需要编写一个函数来返回连接后的值。

在第二种情况下,您需要监视对象对象的所有属性,您可以这样做:

复制代码代码如下所示:

美元美元('things范围看,叫我(…),真的);
使用模块组织依赖

供应商(名称、对象或构造函数()))解释:一个可配置服务,创建一个复杂的逻辑比较。如果你把一个对象作为参数,该对象必须有一个功能叫做$ GET,它需要返回到服务的名字。否则,AngularJS会认为当你通过一个构造函数,构造函数将返回到服务实例对象。

厂(名称、$ GET函数())解释说:不可配置的服务,创建一个复杂的逻辑比较。您需要指定一个函数,并在函数被调用时,该服务的实例返回。它可以被视为一种服务(名称,{ $ GET:getfunction美元()})。

服务(名称,构造函数())是一种不可配置的服务,用于创建简单的逻辑比较。类似于上面的提供者函数的构造函数参数,角调用可以创建服务实例。

模块工厂的一个应用实例

复制代码代码如下所示:
您的购物车
无功shoppingmodule = angular.module('shoppingmodule,{ });

shoppingmodule.factory('items,函数(){(){

var项目{ };

items.query =函数(){

返回{

{标题:'paint壶,描述:'pots满油漆,价格:3.95 },

{标题:'paint壶,描述:'pots满油漆,价格:3.95 },

{标题:'paint壶,描述:'pots满油漆,价格:3.95 }

};

};

返回的项目;

});

功能shoppingcontroller(美元范围,项目){

scope.items美元= items.query();

}

店!!
{项目名称} }

{项目}描述}

{ { } } | item.price货币
引入第三方模块

在大多数应用程序中,我们为所有人创造一个模块的代码,把所有的东西到这个模块的依赖,这将很好地工作。但是,如果你要使用的服务或指导,第三方的软件包提供的,他们通常有自己的模块,所以你需要定义依赖应用程序模块引用他们。例如:

无功appmod = angular.module('app,{ 'snazzy '超级' });

滤波器实例

复制代码代码如下所示:
您的购物车
无功shoppingmodule = angular.module('shoppingmodule,{ });

shoppingmodule.filter('titlecase,函数(){(){

无功titlecasefilter =功能(输入){

VaR的话= input.split('');

对于(var i = 0;i < words.length;i++){

话{我} =话{ 0 }。charAt(0)。ToUpperCase()+的话{我}片(1);

}

返回words.join('');

};

返回titlecasefilter;

});

功能shoppingcontroller(范围){

scope.pageheading美元=这是一个测试用例的;

}

{ { pageheading titlecase } } |
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部