Javascript 推送到数组不会通过ng repeat指令更新视图列表

Javascript 推送到数组不会通过ng repeat指令更新视图列表,javascript,arrays,angularjs,angular-ui-router,angularjs-ng-repeat,Javascript,Arrays,Angularjs,Angular Ui Router,Angularjs Ng Repeat,在我的index.html <div ng-repeat="item in itemCollection"> {{item.name}} {{item.date}} ... </div> itemCollection得到更新。我使用alert() 但视图中显示的列表不会得到更新。我已经试过使用$scope.$apply,但还是一样。我可能做错了什么 已编辑添加了其他信息: div位于ng控制器内 <body ng-app = "grabbi

在我的
index.html

<div ng-repeat="item in itemCollection">
    {{item.name}}
    {{item.date}}
    ...
</div>
itemCollection
得到更新。我使用
alert()

但视图中显示的列表不会得到更新。我已经试过使用
$scope.$apply
,但还是一样。我可能做错了什么

已编辑添加了其他信息:

div
位于
ng控制器内

<body ng-app = "grabbingSystem" ng-controller = "mainCtrl">
    <div class = "center-wrap">
        <ui-view></ui-view> //I'm using angular-ui-router
    </div>
</body>

我试过你的代码,它运行得很好,只是做了一些小改动

HTML

<body ng-app="myApp" ng-controller="MainController">
<div ng-repeat="item in itemCollection">
  {{item.name}}
  {{item.date}}
</div>
</body>
检查您的ng repeat是否位于正确的控制器内


您应该调用将项添加到数组中的函数。

我尝试了您的代码,它工作得非常好,只是做了一些小改动

HTML

<body ng-app="myApp" ng-controller="MainController">
<div ng-repeat="item in itemCollection">
  {{item.name}}
  {{item.date}}
</div>
</body>
检查您的ng repeat是否位于正确的控制器内



您应该调用将项添加到数组的函数。

这是完整的代码吗?您是否有嵌套的控制器或嵌套的ng repeat?其次,body标记上的
ng控制器
没有任何用途,除非您隐含地需要一个控制器来处理位于body内部但在
ui视图
之外的某些代码。即使这样,该内容的控制器在其内容div附近的本地性能也更好。是的,您不能以这种方式在它们之间传递数据,因为它们每个都有自己的控制器实例。如果两个状态都有相同的数据,这可能只是因为它们都运行了控制器的初始化代码,但一个状态的更改不会影响另一个状态。最好通过服务或$broadcast/$emit在状态之间共享数据。从技术上讲,如果两个状态都没有控制器,他们都将从body标签共享控制器,并且确实将共享数据,但这是一种反模式,它最终成为一个大怪物控制器,除了违反单一责任原则之外,它做任何事情,并且非常难以调试。这是完整的代码吗?您是否有嵌套的控制器或嵌套的ng repeat?其次,body标记上的
ng控制器
没有任何用途,除非您隐含地需要一个控制器来处理位于body内部但在
ui视图
之外的某些代码。即使这样,该内容的控制器在其内容div附近的本地性能也更好。是的,您不能以这种方式在它们之间传递数据,因为它们每个都有自己的控制器实例。如果两个状态都有相同的数据,这可能只是因为它们都运行了控制器的初始化代码,但一个状态的更改不会影响另一个状态。最好通过服务或$broadcast/$emit在状态之间共享数据。从技术上讲,如果两个状态都没有控制器,他们都会从body标签共享控制器,并且确实会共享数据,但这是一种反模式,它最终成为一个大怪物控制器,除了违反单一责任原则之外,它什么都做,并且极难调试。您是否刚刚为itemCollection添加了初始值<代码>$scope.itemCollection=[{“name”:“x”,“date”:“y”}]如果是,原因是什么?
ng repeat
位于控制器内部。将项添加到数组的函数被正确调用。这只是一个示例,您可以删除它。检查我刚刚更改了fiddle和代码。它仍然在工作。@jimx你能为你的代码创建一个好的fiddle或jsbin吗?你只是给itemCollection添加了一个初始值吗<代码>$scope.itemCollection=[{“name”:“x”,“date”:“y”}]如果是,原因是什么?
ng repeat
位于控制器内部。将项添加到数组的函数被正确调用。这只是一个示例,您可以删除它。检查我刚刚更改了fiddle和代码。它仍然在工作。@jimx你能为你的代码创建好的fiddle或jsbin吗。
.config([
        '$stateProvider',
        '$urlRouterProvider',
        function($stateProvider, $urlRouterProvider){

            $stateProvider
                .state('list', {
                    url: '/list',
                    templateUrl: 'tickets/_ticketsList.html',
                    controller: 'mainCtrl',
                    resolve: {
                      postPromise: ['tickets', function(tickets){  
                        return tickets.DBgetAll();
                      }]
                    }
                })
                .state('grab', {
                    url: '/grab',
                    templateUrl: 'tickets/_ticketsGrab.html',
                    controller: 'mainCtrl'
                })

            $urlRouterProvider.otherwise('list');
        }

    ])
<body ng-app="myApp" ng-controller="MainController">
<div ng-repeat="item in itemCollection">
  {{item.name}}
  {{item.date}}
</div>
</body>
var myApp = angular.module('myApp', []);

myApp.controller("MainController", function($scope) {
$scope.itemCollection = [];

$scope.someFunction = function(){
    var o = {};

    o.name = "a";
    o.date = "b";

    $scope.itemCollection.push(o);
};

$scope.someFunction();

});