Javascript AngularJS数据库更改侦听器

Javascript AngularJS数据库更改侦听器,javascript,angularjs,ionic-framework,pouchdb,Javascript,Angularjs,Ionic Framework,Pouchdb,我在网上学习了一些关于待办事项列表的教程。。。但我认为,这些教程并没有使用最佳实践来实现。所有代码都在控制器中。 我的控制器看起来像这样,我认为变更监听器的代码不在最佳“位置”。我应该在哪里实现侦听器 .controller('TodosCtrl', ['$scope', '$state', 'Todo', function($scope, $state, Todo) { $scope.create = function() { $state.go('todo_create'); };

我在网上学习了一些关于待办事项列表的教程。。。但我认为,这些教程并没有使用最佳实践来实现。所有代码都在控制器中。 我的控制器看起来像这样,我认为变更监听器的代码不在最佳“位置”。我应该在哪里实现侦听器

.controller('TodosCtrl', ['$scope', '$state', 'Todo', function($scope, $state, Todo) {
  $scope.create = function() { $state.go('todo_create'); };
  $scope.todos= [];
  $scope.$on('$ionicView.loaded', function() {
    localDB.changes({ 
      since: 'now',
      live: true,
      include_docs: true
    }).on('change', function (change) {
      if (change.doc && change.doc._id.substring(0, change.doc._id.indexOf('_')) === 'todo') {
        if (change.deleted) {
            ....
        } else {
            ....
        }
      }
    });
  });


  Todo.all().then(function (result) { 
    for (var i = 0; i < result.length; i++) {
      $scope.todos.push(result[i].doc);
    }
  });


}]) 
.controller('TodosCtrl',['$scope','$state','Todo',函数($scope,$state,Todo){
$scope.create=function(){$state.go('todo_create');};
$scope.todos=[];
$scope.$on('$ionicView.loaded',函数(){
localDB.changes({
因为:"现在",,
现场直播:没错,
包含文档:true
}).on('change',函数(change){
if(change.doc&&change.doc.\u-id.子字符串(0,change.doc.\u-id.indexOf(“”))=='todo'){
如果(更改。删除){
....
}否则{
....
}
}
});
});
Todo.all().then(函数(结果){
对于(变量i=0;i
从概念上讲,耦合到DOM的所有相关代码都应该在控制器中。
所有其他逻辑都应插入到服务中

有关exmaple的详细信息,请参见我的评论:

.controller('TodosCtrl', ['$scope', '$state', 'Todo', function($scope, $state, Todo) {
        $scope.create = function() { $state.go('todo_create'); };
        $scope.todos= [];
        $scope.$on('$ionicView.loaded', function() {
            localDB
                /** Not sure exactly what it is but if that some sort of initialization - this is better to be placed in one of the services 
                .changes
                ({
                    since: 'now',
                    live: true,
                    include_docs: true
                })
                */
                .on('change', function (change) {
                    if (change.doc && change.doc._id.substring(0, change.doc._id.indexOf('_')) === 'todo') {
                        if (change.deleted) {
                        ....
                        } else {
                        ....
                        }
                    }
                });
        });


        Todo.all().then(function (result) {
            for (var i = 0; i < result.length; i++) {
                $scope.todos.push(result[i].doc);
            }
        });
    }]) ;
.controller('TodosCtrl',['$scope','$state','Todo',函数($scope,$state,Todo){
$scope.create=function(){$state.go('todo_create');};
$scope.todos=[];
$scope.$on('$ionicView.loaded',函数(){
本地数据库
/**不确定它到底是什么,但如果是某种形式的初始化,则最好将其放在其中一个服务中
.变化
({
因为:"现在",,
现场直播:没错,
包含文档:true
})
*/
.on('change',函数(change){
if(change.doc&&change.doc.\u-id.子字符串(0,change.doc.\u-id.indexOf(“”))=='todo'){
如果(更改。删除){
....
}否则{
....
}
}
});
});
Todo.all().then(函数(结果){
对于(变量i=0;i
但我在侦听器中使用$scope变量。。。因此,代码与dom相关,对吗?如果需要$scope,我如何将侦听器放入服务中?$scope是每个控制器的特定对象,不能在服务中关联。这意味着您确实不能将侦听器放在服务中。您可以在监听器中放置的是我在代码中提到的初始化(以及其他不依赖DOM的东西)