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();
});