我是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;
}]);
我是否也需要在控制器中播放广播?
答案 0 :(得分:0)
最初$scope.names = [];
$scope.$on
是一个事件监听器,因此应该有$scope.$emit
或$scope.$broadcast
来加载您的数组。
因此,在第一次加载时,某些事件会通过$scope.$emit
或$scope.$broadcast
发生,并且会被$scope.$on
监听,因此您的数组会被加载。
我认为当您的切换查看并返回时,它不会再次发生。
请参阅最后评论以获得解释
我刚改变了你的掠夺者
http://embed.plnkr.co/CZuqLzkU0wd0Soskvi2j/preview
希望这有助于!!!!!!