簡體   English   中英

AngularJS:試圖了解 Angular 上下文和觀察者

[英]AngularJS: Trying to understand Angular context & Watchers

我讀到 AngularJS 有一個上下文,它部署了觀察者和消化循環。 因此,如果從前端或后端更新任何變量,上述這些組件將有助於確保涉及該變量的所有相應字段都將被更新。

所以我想測試這個,所以創建了一個樣本乘以 2,如下所示

<!DOCTYPE html>
<html ng-app="myapp">
  <head>
    <title>Parcel Sandbox</title>
    <meta charset="UTF-8" />
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.js"></script>
  </head>

  <body>
    <div id="app"></div>
    <script>
      
    </script>
    <div class="container" ng-controller="maincontroller">
      <label id="input_value">Please enter number </label>
      <input type="text" id="input_value" ng-model="number" />

      <p>You have entered : {{ number }}</p>
      <p>
      Multiplied by 2 : {{ multipleBy2 }}
      </p>
      
    </div>

    <script src="src/index.js"></script>
  </body>
</html>

我的index.js代碼如下

var myapp = angular.module("myapp", []);
      var maincontroller = function ($scope) {
        $scope.number = "";
        
        $scope.multipleBy2 = $scope.number * 2; // this is returning zero at the beginning of the page.
        
      };
      myapp.controller("maincontroller", maincontroller);

如果我期望的是,當number輸入字段收到 2 時,我應該看到Multiplied by 2:為 4?

我在這里錯過了什么嗎?

謝謝你。

為了使其按您期望的開箱即用方式工作,AngularJS 需要執行以下兩項操作之一:

  1. 重新處理每次更改的所有內容,這將是一場性能噩夢,或者
  2. 足夠聰明地知道某些 scope 屬性何時依賴於其他 scope 屬性的值,並且只重新處理那些相關屬性,這將非常復雜。

呈現始終需要新鮮運行的結果的簡單方法是使其成為 function 而不是屬性的結果。

$scope.multipleBy2 = () => $scope.number * 2;

雖然與 function 結果綁定的 AngularJS 表達式將始終在摘要循環上重新運行,但它實際上不會重新渲染相應元素的 DOM,除非摘要之間的值發生變化,因此值得慶幸的是發生了一些優化。

作為最佳實踐,這些函數不應在運行時改變 $scope 的 state,否則您可能會陷入無限摘要循環問題。

$scope.multipleBy2 = () => $scope.number++ * 2;
// infinite $digest loop error

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM