在我的离子应用程序中,我有两项服务研究和收藏。研究进行http调用以获取一个json对象,该对象获取一个JSON数组对象,我遍历并显示在html页面上。这是研究服务:
.factory('Studies',function($http,$filter,$q){
var deferred = $q.defer();
$http.get("http://localhost/platform/loginSuccess.json").success(
function(data){
// angular.copy(data, studies);
deferred.resolve(data);
}
);
return {
all: function(){
return deferred.promise;
}
};
})
这是控制器代码:
$scope.studies = [];
Studies.all().then(function(data) {
$scope.x = angular.fromJson(data.allProjects);
$scope.studies = angular.fromJson($scope.x.list);
});
这是它在html中的显示方式:
<div class="feed-item" ng-repeat="study in studies">
<div class="feed-media">
<img src="http://www.speedhunters.com/wp-content/uploads/2013/12/Lamborghini-Hurac%C3%A1n-LP610-4-01_N3-1200x800.jpg" class="feed-image">
<div class="feed-gradient-overlay"></div>
<a href="#/app/studies/{{study.nodeRef}}"><h4 class="feed-title">{{study.title}}</h4></a>z
</div>
</div>
study.nodeRef然后在同一个控制器中提取,然后被提取到另一个使用nodeRef调用另一个服务的函数。
scope.nodeId = $stateParams.studynodeRef;
$scope.collection = [];
Collections.fetchCollection($scope.nodeId).then(function(data){
$scope.y = angular.fromJson(data.list);
$scope.collections = angular.fromJson($scope.y[0].collections);
});
以下是馆藏服务:
.factory('Collections', ['$q', '$http', function($q, $http) {
return {
fetchCollection: function(collectionId) {
var deffered = $q.defer();
$http({
method: 'post',
url: 'http://localhost/platform/project/fetch.json',
params: {
'nodeRef': collectionId
}
}).success(function(data) {
deffered.resolve(data);
});
return deffered.promise;
}
};
}])
然后我遍历我的menu.html页面中的集合,这基本上是我所有模板中的侧边菜单:
<ion-list ng-controller="NavigationCtrl" ng-repeat="collection in collections">
<ion-item nav-clear menu-close ng-click="go('app.studies')" class="item item-icon-left brand-base-text-color">
<i class="icon ion-ios-paper"></i>
{{collection.name}}
</ion-item>
现在当我点击studies.html页面上的一项研究时,它会重定向到相应的#/ app / studies / {{study.nodeRef}}但是,侧边菜单甚至不会更新侧边菜单上的集合刷新之后。研究和收集服务都在同一个名为AppCtrl的控制器下。如何根据研究的适当nodeRef自动重新加载集合?
修改
以下是我的app.js文件中的代码,用于研究,学习和菜单(集合的迭代完成)。可以看出,它们都使用名为AppCtrl的相同控制器:
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/rubyonic/menu.html",
controller: 'AppCtrl',
reload: true
})
.state('app.studies', {
url: "/studies",
views: {
'menuContent': {
templateUrl: "templates/rubyonic/studies.html",
controller: 'AppCtrl',
reload: true
}
}
})
.state('app.study', {
url: "/studies/:studynodeRef",
views: {
'menuContent': {
templateUrl: "templates/rubyonic/overview.html",
controller: 'AppCtrl',
reload: true
}
}
})