gpt4 book ai didi

angularjs - 调用 $state.go 后 ion-list 不会刷新

转载 作者:行者123 更新时间:2023-12-04 13:11:09 25 4
gpt4 key购买 nike

我正在使用本教程学习 AngularJS 和 ionic 框架:

http://www.htmlxprs.com/post/12/tutorial-on-using-parse-rest-api-and-ionic-framework-together

一切正常,直到我在 createTodo 状态中创建一个新项目然后调用 $state.go('todos') 返回到我的项目列表,这是创建 Todo Controller 的代码:

.controller('TodoCreateController', ['$scope', 'Todo', '$state', function($scope, Todo, $state) {
$scope.todo = {};

$scope.create = function() {
Todo.create({content: $scope.todo.content}).success(function(data) {
$state.go('todos', {}, {reload: true});
});
}
}])

这是项目列表 Controller 的代码:
.controller('TodoListController', ['$scope', 'Todo', '$state', function($scope, Todo) {
Todo.getAll().success(function(data) {
$scope.items = data.results;
});

$scope.deleteItem = function(item) {
Todo.delete(item.objectId);
$scope.items.splice($scope.items.indexOf(item), 1);
};
}])

这是配置的状态
.config(function($stateProvider) {
$stateProvider.state('todos', {
url: '/todos',
controller: 'TodoListController',
templateUrl: 'views/todos.html'
}).state('createTodo', {
url: '/todo/new',
controller: 'TodoCreateController',
templateUrl: 'views/create-todo.html'
});
})

当应用程序启动时,TodoListController 的方法被调用,这要归功于添加的最后一行和主 app.js 中 .run 方法的结尾(或者至少这是我的理解):
.run(function($ionicPlatform, $state) {
$ionicPlatform.ready(function() {

if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
});

$state.go('todos');
})

我的问题是,一旦创建新项目并且我从 TodoCreateController 调用 $state.go('todos'),它就会带我回到项目列表,但新项目不存在,而 TodoListController 的方法永远不会被调用,因此使列表过时。

创建新项目后,如何在“待办事项”状态下刷新列表?

最佳答案

我找到了一个相当优雅的解决方案:

在我的 TodoListController 中,我定义了一个这样的事件监听器:

$rootScope.$on('todo:listChanged', function() {
$scope.updateList();
});

然后是 updateList() 方法
$scope.updateList = function() {
Todo.getAll().success(function(data) {
$scope.items = data.results;
});
};

最后在 TodoCreateController 中,一旦创建了项目,就在更改状态之前,我 $emit 事件向上
$scope.create = function() {
Todo.create({content: $scope.todo.content}).success(function(data) {
$scope.$emit('todo:listChanged');
$state.go('todos');
});
};

瞧!列表相应地更新,如果我删除或更新列表项,我现在可以使用相同的事件

关于angularjs - 调用 $state.go 后 ion-list 不会刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27853431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com