当前位置: 首页 > 面试题库 >

angularjs-带有ngInit的ngRepeat-ngRepeat不会刷新呈现的值

颜啸
2023-03-14
问题内容

我有使用ngRepeater显示的数组,但是使用此指令时,我使用的是ngInit指令,该指令执行应返回要显示的对象的功能。一切工作正常,但是当我在数组中添加新值的“新建”按钮时,仅在我认为应根据数组值的量执行函数后,才执行函数“SetPreview”。我怎样才能做到这一点?

用户界面:

    <body ng-app>

      <ul ng-controller="PhoneListCtrl">
          <button ng-click="add()">Add</button>
        <li ng-repeat="phone in phones" ng-init="displayedQuestion=SetPreview(phone);">
          {{displayedQuestion.name}}
          <p>{{displayedQuestion.snippet}}</p>
        </li>
      </ul>
    </body>

控制器:

    function PhoneListCtrl($scope) {
      $scope.phones = [
        {"name": "Nexus S",
         "snippet": "Fast just got faster with Nexus S."},
        {"name": "Motorola XOOM™ with Wi-Fi",
         "snippet": "The Next, Next Generation tablet."},
        {"name": "MOTOROLA XOOM™",
         "snippet": "The Next, Next Generation tablet."}
      ];

        $scope.add = function(){
            this.phones.push({name:'1', snippet:'n'});
        };        
        $scope.SetPreview = function(phone)
        {
            //here logic which can take object from diffrent location
            console.log(phone);
            return phone;
        };
    }

示例在这里-jsfiddle

编辑:
这是一个更复杂的示例:
->现在,电话集合为空,当您单击添加按钮时,添加了新项并将其设置为可编辑(您可以在文本字段中更改值),并且在执行ngRender时SetPreview函数返回可编辑对象(就像预览一样工作)。现在尝试再次单击“添加”按钮,您会看到仍然将第一项的可编辑值显示给用户,但是我想刷新整个ng-
repeater。


问题答案:

您正在遇到Angular性能功能。

本质上,Angular可以看到数组中的元素(例如,“ A”)是相同的对象引用,因此它不会再次调用ng-
init。这是有效的。即使将旧列表连接到新列表中,Angular也会看到它是相同的引用。

相反,如果您创建一个具有与旧对象相同值的新对象,则该对象具有不同的引用,并且Angular会对其进行重新初始化:不良示例无法满足您的期望: http
//jsfiddle.net/fqnKt/37/
    $scope.add = function(item) {
        var newItems = [];
        angular.forEach($scope.items, function(obj){
            this.push({val:obj.val});
        },newItems)

        newItems.push({val:item})
        $scope.items = newItems;
    };

我不建议您摆弄小提琴,但是您应该找到不同于ng-init的方法来触发代码。



 类似资料:
  • 本文向大家介绍AngularJS ngRepeat,包括了AngularJS ngRepeat的使用技巧和注意事项,需要的朋友参考一下 示例 ng-repeat 是Angular中的内置指令,它使您可以迭代数组或对象,并使您能够为集合中的每个项目重复一次元素。 ng-重复数组 其中: item =集合中的单个项目 itemCollection =您要迭代的数组 ng-重复一个对象 其中: key

  • 问题内容: 我用来渲染一个。我的控制器看起来像这样: 如您所见,我正在定期更新阵列。但是,我的观点是这样构造的: 问题是,当我更新时,它不会用新数据重新渲染我的表。 我将如何解决这个问题? 问题答案: 您是否将更新包入 ?这应该可以解决问题。

  • 问题内容: 我有项目清单。一个项目可以是很多东西,比如说列表是这样的: 现在,我想使用ngRepeat指令渲染列表,该指令将根据对象的类型使用模板(多态渲染)。可以做到吗? 可能类似( ng-use 是一个 假设 指令): 问题答案: API参考:http://docs.angularjs.org/api/ng.directive: ngSwitch

  • 我正试图找到在与自定义指令一起使用的ngRepeat中获取索引位置的最佳方法。我试图解决的问题是,对于ngRepeat的每次迭代,我希望知道我在迭代中的位置,这样我就可以根据索引位置创建自定义模板。 除非有更好的方法,否则我将尝试基于指令中的此留档执行此功能: http://docs.angularjs.org/guide/directive 我很难理解这个陈述到底在告诉我什么。所以,我试图做的是

  • 问题内容: 我正在尝试编写一些搜索输入,以使用ngResource从数据库中获取数据。 数据在页面上显示为ng-repeat,但是当我执行搜索并且$ scope已更新时,该视图未更新并显示旧数据。 这是代码: main.html(活动视图) main.js searchbar.js 当它启动时,它从数据库中获取所有数据并正确显示它们,当我尝试进行搜索时,$ scope.eventi会更新(我可以从

  • 问题内容: 我正在使用带有过滤器的ng-repeat指令,如下所示: 我可以看到渲染结果很好;现在我想在控制器上对该结果运行一些逻辑。问题是如何获取结果项引用? 更新: 只是为了澄清一下:我正在尝试创建自动完成功能,我有以下输入内容: 然后过滤的结果: 现在我要浏览结果并选择其中一项。 问题答案: 更新 :这是一种比以前更简单的方法。 然后是可访问的。