每次ng模型初始化时,ng-change不会触发

时间:2015-11-03 23:01:10

标签: javascript angularjs angular-ngmodel angularjs-ng-change

我对ng-change和ng-model“如何协同工作”的理解是,对于具有N个元素的数组,如果我在视图中使用ng-repeat将当前索引绑定到ng-模型,然后将ng-change函数绑定到每个元素,然后在视图初始化时, ng-change函数将至少触发N次。事实证明我错了,这里是为了了解原因。

一些代码可以进一步解释:

 $scope.quiz = {

      sections: [
          {
              questions: [
                   {
                       value: 0,
                       title: "Question 1"
                   }
              ]
          },
          {
              questions: [
                   {
                       value: 0,
                       title: "Question 1"
                   },
                   {
                       value: 0,
                       title: "Question 2"
                   }
              ]
          }
      ]
 };

我的数据集与我上面发布的数据集有些相似,在我看来,我使用ng-repeat为每个部分中的每个问题生成输入元素;类似的东西:

<!-- Loop through each section -->
<div ng-repeat="section in quiz.sections">

    <!-- Loop through each question -->
    <input type="number" ng-repeat="question in section.questions" ng-model="question.value" ng-change="change()"/>

</div>

我的ng-change功能相当密集,在页面加载时无需执行此密集代码,执行驴工作的代码只需在用户与视图交互时触发。

所以我定义了一个计数器来跟踪ng-change被触发的次数,当它达到它的MAX值(这是我的数据结构中的问题数)时我假设页面已经完成初始化然后在我的ng-change函数中我定义一个新函数并设置ng-change函数来引用它,因此处理用户交互的代码不会在初始化时运行。

沿着以下几点:

 var count = 0; //Keep track of how many times change has been fired
 var MAX = quiz.getQuestionCount(); //How many questions in the quiz 

 $scope.change = function() {

      /*
            Do nothing for now
      */


      /*
       * Once this has been fired MAX times, assign the 'actual logic'
       * to the change function.
       *
       * MAX is not being reached...
      */
      if(count >= MAX) {

          $scope.change = function() {
               /*
                  Some intensive computation that doesn't need 
                  to be invoked during the 'initial load' of the page
                  ...
                  ...
               */
          };
      }

 };

问题是计数&lt; MAX一旦页面加载,我原本以为ng-change会在每次ng-repeat迭代遍历在视图编译过程中给出的数据集时被触发,上面的例子告诉我我错了。

当然,如果我做一些不合逻辑的事情:

   if(count >= MAX / 2) {
        //This gets triggered
   }

但我自然不会依赖'魔术':)。

问题:

如果我有一个包含30个元素的数组并且对它们进行ng-repeat分配ng-model和ng-change值,我希望ng-change在页面(即控制器)时至少被触发30次)加载,这似乎不是真的,任何人都可以解释为什么?

我的理解是初始化ng-model值应该触发更改事件,如果在上面的示例中加载页面时执行的ng-change少于30​​次,则不会出现这种情况。

0 个答案:

没有答案