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 } } |