Art*_*jas 6 angularjs angular-ui-router ionic-framework
我正在使用本教程学习AngularJS和离子框架:
http://www.htmlxprs.com/post/12/tutorial-on-using-parse-rest-api-and-ionic-framework-together
一切正常,直到我在createTodo状态下创建一个新项目,然后调用$ state.go('todos')返回我的项目列表,这里是创建Todo控制器的代码:
.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});
});
}
}])
Run Code Online (Sandbox Code Playgroud)
这是项目列表控制器的代码:
.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);
};
}])
Run Code Online (Sandbox Code Playgroud)
以下是配置的状态
.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'
});
})
Run Code Online (Sandbox Code Playgroud)
当应用程序启动时,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');
})
Run Code Online (Sandbox Code Playgroud)
我的问题是,一旦创建了新项目并从TodoCreateController调用$ state.go('todos'),它就会将我带回项目列表,但是新项目不在那里以及TodoListController的方法永远不会被调用,因此列表已过时.
如何在创建新项目后刷新"待办事项"状态中的列表?
Art*_*jas 12
我找到了相当优雅的解决方案:
在我的TodoListController中,我定义了一个这样的事件监听器:
$rootScope.$on('todo:listChanged', function() {
$scope.updateList();
});
Run Code Online (Sandbox Code Playgroud)
然后是updateList()方法
$scope.updateList = function() {
Todo.getAll().success(function(data) {
$scope.items = data.results;
});
};
Run Code Online (Sandbox Code Playgroud)
最后在TodoCreateController中,I $在创建项目后立即向上发出事件,在更改状态之前
$scope.create = function() {
Todo.create({content: $scope.todo.content}).success(function(data) {
$scope.$emit('todo:listChanged');
$state.go('todos');
});
};
Run Code Online (Sandbox Code Playgroud)
瞧!列表会相应更新,如果删除或更新列表项,我现在可以使用相同的事件
| 归档时间: |
|
| 查看次数: |
10304 次 |
| 最近记录: |