Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让控制器在Angularjs中刷新?_Angularjs_Ionic Framework - Fatal编程技术网

如何让控制器在Angularjs中刷新?

如何让控制器在Angularjs中刷新?,angularjs,ionic-framework,Angularjs,Ionic Framework,我在应用程序中使用了Ionic框架,我坚持使用其中一个部分。在我的应用程序中,我有一个Favorites视图,其中显示了用户在应用程序中其他地方喜欢的项目列表。问题是,控制器中的代码只在第一次点击收藏夹路由时运行一次。如果用户随后在应用程序中的其他位置添加收藏夹,然后返回收藏夹视图,则不会重新生成列表 在我的控制器中,我有以下功能: Favourites.all().then(function(results){ angular.forEach(results, function(val

我在应用程序中使用了Ionic框架,我坚持使用其中一个部分。在我的应用程序中,我有一个Favorites视图,其中显示了用户在应用程序中其他地方喜欢的项目列表。问题是,控制器中的代码只在第一次点击收藏夹路由时运行一次。如果用户随后在应用程序中的其他位置添加收藏夹,然后返回收藏夹视图,则不会重新生成列表

在我的控制器中,我有以下功能:

Favourites.all().then(function(results){
    angular.forEach(results, function(value, key){
        // add results to an array to present in the view
    })
})
我有一个进行数据库查询的工厂:

.factory('Favourites', function(DB){
    var self=this;
    console.log("test 1");

    self.all = function() {
        return DB.query('SELECT * FROM favourites')
            .then(function(result){
                return DB.fetchAll(result);
            });
    };
    return self;
})

我的问题是,在用户将新收藏夹添加到数据库后,如何让Favorites控制器刷新?我尝试将作用域重载函数添加到控制器,并将重载:true添加到路由的$stateProvider,但两者都没有任何区别。

从任何地方使用广播,并在任何地方捕获它:

应用程序中的任意位置:

$scope.onNewFavoriteHandler = function() {
    //Add to DB logic
    $rootScope.$broadcast('new-favorite');
}
有关控制人:

$scope.$on('new-favorite', function(event, args) { 
    Favourites.all().then(function(results){
        angular.forEach(results, function(value, key){
            // add results to an array to present in the view
        })
    });
    // do what you want to do
})

您可以使用ui路由器和resolve/reload()重新加载控制器/视图:

  .state('somestate', {
    url: '/somestate',
    templateUrl: '/path/to/some/view.html',
    resolve: {
      favorites: ['Favourites', function ($Favourites) {
        return Favourites.all();
      }]
    },
    controller: ['$scope', '$state', 'favorites', function ($scope, $state, favorites) {
      angular.forEach(favorites, function(value, key){...});

      //...later...
      $scope.onSomethingHappened = function reload(){
            var current = $state.current;
            var params = angular.copy($stateParams);
            $state.transitionTo(current, params, { reload: true, inherit: true, notify: true });          
    }]
  })