$ scope。$ on仅适用于第一个视图

时间:2015-05-07 09:19:46

标签: angularjs angularjs-scope angularjs-ng-repeat ionic

我是AngularJS的新手,但我的Ionic应用程序遇到了问题。在我的一个观点中,我使用ng-repeat来显示pouchDB中的值。但是,它只在我第一次查看时才有效。如果我离开视图然后返回它只是空白。我相信我已经确定问题是我控制器中代码的一部分。

我的观点:

<ion-view title="All">
  <ion-content padding="true">
    <div class="list" ng-controller="MyController">
      <div class="item item-button-right" ng-repeat="name in names">
      {{name.name}} 
      <button class="button button-clear button-assertive" ng-click="addFav(name.name)">
      <i class="icon ion-ios-heart-outline"></i>
      </button>
      </div>
    </div>      
  </ion-content>
</ion-view>

我的控制器:

app.controller("MyController", function($scope, $ionicPopup, PouchDBListener) {
  $scope.names = [];

  $scope.addFav = function(favName) {     
      $ionicPopup.alert({
          title: 'Favorite',
          template: favName + ' has been added',
          okText: 'OK'
      })
  }

  $scope.$on('add', function(event, name) {
      $scope.names.push(name);
  });
});

似乎$ scope。$ on仅在第一个视图上运行,从而导致视图为空。作为新的,我从教程中得到了上面的代码,因此对于导致它的原因或如何解决它没有任何想法?

更新:

我的工厂里有一个同步我的数据库的广播:

app.factory('PouchDBListener', ['$rootScope', function($rootScope) {

localDB.changes({
    continuous: true,
    onChange: function(change) {
        if (!change.deleted) {
            $rootScope.$apply(function() {
                localDB.get(change.id, function(err, doc) {
                    $rootScope.$apply(function() {
                        if (err) console.log(err);
                        $rootScope.$broadcast('add', doc);
                    })
                });
            })
        } else {
            $rootScope.$apply(function() {
                $rootScope.$broadcast('delete', change.id);
            });
        }
    }
});

return true;
 }]);

我是否也需要在控制器中播放广播?

1 个答案:

答案 0 :(得分:0)

最初$scope.names = [];

$scope.$on是一个事件监听器,因此应该有$scope.$emit$scope.$broadcast来加载您的数组。

因此,在第一次加载时,某些事件会通过$scope.$emit$scope.$broadcast发生,并且会被$scope.$on监听,因此您的数组会被加载。

我认为当您的切换查看并返回时,它不会再次发生。

请参阅最后评论以获得解释

我刚改变了你的掠夺者

http://embed.plnkr.co/CZuqLzkU0wd0Soskvi2j/preview

希望这有助于!!!!!!