2013-07-23 36 views
2

的AngularJS文檔僅列表角表達式和JS表達式之間的四個差(docs):有些賦值操作符不能在AngularJS表達式中工作。爲什麼不呢?

  1. 屬性評價(對範圍而不是全局窗口);
  2. Forgiving(至undefinednull);
  3. 不允許控制流程語句;
  4. 過濾器(表達式評估的結果可以通過過濾器鏈)。

但算術賦值運算符在表達式中也不起作用。例如,「plus-equals」+=和「minus-equals」-=在等號後的常數上出現錯誤。

是否有一個特定的原因,爲什麼這些賦值操作符在表達式中允許有問題?或者這只是一個實施重點問題?

有沒有可能是一種特定於角度的遞增和遞減方式?目前,人們似乎需要輸入完整的somelongname = somelongname + x,或者將增量和減量定義爲控制器中的函數。其他算術賦值運算符也是如此。

一個簡短的例子,我用什麼來增量和減量作爲解決方法。它的作品,但它是優雅的?

在控制器:

$scope.incr = function(number, constant){ 
    $scope[number] += constant; 
}; 
$scope.decr = function(number, constant){ 
    $scope[number] -= constant; 
}; 

在HTML:

<button class="btn" ng-disabled="currentPage == 0" ng-click="decr('currentPage', 1)"> 
+1

您似乎指的是角度視圖表達式(您可以在實際視圖中的{}標記內執行的操作)。 Angular允許在視圖中發生一些事情,但更傾向於在控制器,指令或服務中發生大部分繁重工作。也許如果你在視圖表達中解釋了你想要達到的目標,我們可以給出更好的答案。 – Sharondio

+0

文檔中的術語非常明確:「表達式是類似JavaScript的代碼片段,通常放置在綁定中,例如'{{expression}}'。表達式由$ parse服務處理。」我試圖實現的是通過'ng-click =「...」'在'$ scope'中增加和減少數字變量。如果我理解正確,那麼在{{{...}}中給出的表達式和作爲指令值(例如'ng-click')的評估方式也會類似。 – AliOli

回答

1

有什麼特別的原因,這些賦值運算符是有問題的,允許在表達式?或者這只是一個實施重點問題?

我會說這是什麼@Sharondio在上面的評論中提及

  1. 實施重點(見V1.2 Brad and Igor video talking about expression support)和
  2. 組合:視圖是不正常的地方爲表達式–控制器。
相關問題