天天看点

angularjs表达式-Expression

    $parse用法: $parse(expression);

     参数:javascript代码片段。

     返回值:{function(context, locals)},表达式编译结果:

context:嵌入表达式执行的作用于scope。

locals:本地变量,常用于替换重写context。

返回值同样带有<code>assign</code>属性,允许为表达式赋值。

  下面的表达式在angularjs将都是合法的表达式:

<code>1+2</code>

<code>3*10 | currency</code>

<code>user.name</code>

    angularjs视图表达式有点像javascript表达式,但是并不是利用javascript表达式eval()函数解析执行的,与javascript表达式区别如下:

所有属性都依赖于scope作用于。并不是javascript的全局作用于window。

表达式计算兼容处理null和undefined,而javascript则会抛出nullpointerexceptions异常。

没有控制流程语句,条件,循环throw。

过滤器,多余angularjs表达式计算结果可以通过过滤器转化格式,|表达式,如时间,货币,数字格式等。

html:

angularjs表达式-Expression

 1 &lt;!doctype html&gt;

 2 

 3 &lt;html ng-app&gt;

 4 

 5 &lt;head&gt;

 6 

 7 &lt;script src="http://code.angularjs.org/angular-1.0.2.min.js"&gt;&lt;/script&gt;

 8 

 9 &lt;script src="script.js"&gt;&lt;/script&gt;

10 

11 &lt;/head&gt;

12 

13 &lt;body&gt;

14 

15 &lt;div ng-controller="cntl2" class="expressions"&gt;

16 

17 expression:

18 

19 &lt;input type='text' ng-model="expr" size="80"/&gt;

20 

21 &lt;button ng-click="addexp(expr)"&gt;evaluate&lt;/button&gt;

22 

23 &lt;ul&gt;

24 

25 &lt;li ng-repeat="expr in exprs"&gt;

26 

27 [ &lt;a href="" ng-click="removeexp($index)"&gt;x&lt;/a&gt; ]

28 

29 &lt;tt&gt;{{expr}}&lt;/tt&gt; =&gt; &lt;span ng-bind="$parent.$eval(expr)"&gt;&lt;/span&gt;

30 

31 &lt;/li&gt;

32 

33 &lt;/ul&gt;

34 

35 &lt;/div&gt;

36 

37 &lt;/body&gt;

38 

39 &lt;/html&gt;

angularjs表达式-Expression

js:

angularjs表达式-Expression

 1 function cntl2($scope) {

 3 var exprs = $scope.exprs = [];

 5 $scope.expr = '3*10|currency';

 7 $scope.addexp = function(expr) {

 9 exprs.push(expr);

11 };

13  

15 $scope.removeexp = function(index) {

17 exprs.splice(index, 1);

19 };

21 }

angularjs表达式-Expression
angularjs表达式-Expression

15 &lt;div class="example2" ng-controller="cntl1"&gt;

17 name: &lt;input ng-model="name" type="text"/&gt;

19 &lt;button ng-click="greet()"&gt;greet&lt;/button&gt;

21 &lt;/div&gt;

23 &lt;/body&gt;

25 &lt;/html&gt;

angularjs表达式-Expression
angularjs表达式-Expression

 1 function cntl1($window, $scope){

 3 $scope.name = 'world';

 5  

 7 $scope.greet = function() {

 9 ($window.mockwindow || $window).alert('hello ' + $scope.name);

11 }

13 }

angularjs表达式-Expression

     如上所述:angularjs表达式计算兼容处理null和undefined不会抛出任何异常,因为这将现实处理在view显示,而javascript则会抛出nullpointerexceptions异常。例如表达式

      在angularjs表达式中将不存在条件,循环,throw控制流程语句。因为angularjs作为mvc或者贴近pm模式要求表现层逻辑必须包含在controller中,而不是view,view应该足够的被动。在表达式模式中都尽力将表现层不变的表现逻辑和多样易变的ui view中抽离出来,便于更好的自动化测试构建等。

     数据仅作为一种持久化存储领域模型(表现层或者确切的成为视图模型viewmodel),当展现给用户的时候很多时候需要更友好的方式,比如时间,数字,货币格式本地化,

例如:<code>name | uppercase ,</code><code>123 | number:2,3*10|currency。</code>

<code>   filters支持链式写法,如何powershell或者其他操作系统外壳语言一样的管道式模型,形如</code><code>value | filter1 | filter2。</code>

继续阅读