AngularJS解决ng界面长表达式(ui-set)的方法分析
本文实例讲述了AngularJS解决ng界面长表达式(ui-set)的方法。分享给大家供大家参考,具体如下:
本文来自网友sunshine的问题,问题如下:
您好,我想求教一个问题.
在$scope中我的对象名字写的特别深,在html中我又多次用到了同一个对象,对不对在html中让它绑定到一个临时变量呢?
比如:
$scope.this.is.a.very.deep.obj={
'name':'xxx',
'state':'active'};
在模板中,
{{this.is.a.very.deep.obj.name}}
{{this.is.a.very.deep.obj.state}}
类似于这种,我能否把this.is.a.very.deep.obj预先赋给一个临时的变量,然后在两个span中只需o.name,o.state就行了呢?我觉得这样解析起来是不是快一点.
但是我试了,并没有成功.求指点.
先谢了.
在这里首先需要说明的是ng界面的所有引用都需要在$scope这个viewmodel(ui和view的胶水层),所以如果我们希望能够把表达式变得更可读,更友好,那么我们就必须在$scope上创建这个变量。
再则对于ng其使用使用的一堆的$watch,实现脏检查,如果你理解这些了,那么我们就可以很容易的实现一套如spring的
<c:setvar="xxx"expression="xxx"/>
的tag.
对于实现这类tag,我们最好的方式则是利用ng的directive来实现,代码如下:
angular.module("greengerong.ui.tag",[]) .directive("uiSet",[ function(){ return{ restrict:"EA", link:function(scope,elm,iAttrs){ scope.$watch(iAttrs.expression,function(val){ scope[iAttrs. var]=val; varapply=!scope.$$phase?scope.$apply:angular.noop; apply(); }); } }; } ]);
希望本文所述对大家AngularJS程序设计有所帮助。