我在控制器中有这个代码:
$scope.customers = [];
$scope.categories = [];
function init() {
partnersFactory.getPartners(categoryId)
.then(function(res){
$scope.partners = res;
},function(status){
//err
})
partnersFactory.getCategories()
.then(function(res){
$scope.categories = res;
},function(status){
//err
})
}
我需要的是在初始加载时只运行一次partnerFactory.getCategories(),然后保存不变。这样做的最佳方法是什么?使用一些变量如var initialization = false看起来不太干净。
修改 目的:我有一些按类别排序的数据。我现在在做什么:如果有人点击类别,我会从服务器重新加载数据集,但会将其过滤到类别(服务器端)。这就是我需要重新加载数据的原因,而不是类别。我做错了吗?也许在angularjs中过滤它会更好? (服务器上的数据不会不断更新)。
答案 0 :(得分:1)
怎么样:
$scope.customers = [];
$scope.categories = null;
function init() {
partnersFactory.getPartners(categoryId)
.then(function(res){
$scope.partners = res;
},function(status){
//err
})
if($scope.categories == null) {
partnersFactory.getCategories()
.then(function(res){
$scope.categories = res;
},function(status){
$scope.categories = [];
})
}
}
答案 1 :(得分:1)
将partnersFactory.getCategories()
放在init()
函数的一侧只会执行一次
所以你的控制器喜欢,
$scope.customers = [];
$scope.categories = [];
function init() {
partnersFactory.getPartners(categoryId)
.then(function(res){
$scope.partners = res;
},function(status){
//err
})
}
partnersFactory.getCategories()
.then(function(res){
$scope.categories = res;
},function(status){
//err
})
如果您需要$scope.categories
使用angular.copy()
的干净副本,如下所示
partnersFactory.getCategories()
.then(function(res){
$scope.categories = res;
$scope.originalObj = angular.copy($scope.categories); // don't do any changes to $scope.originalObj
},function(status){
//err
})
答案 2 :(得分:1)
在你的工厂,你可以这样做:
.factory('partnersFactory', function($http) {
var categories = [];
var getCategories = function() {
$http.get(...)
.success(function(data){
categories = data;
});
}
getCategories();
return {
getPartners: function(categoryId) {
$http.get(...)
.success(onSuccess)
.error(onError);
},
getCategories: function(){
return categories;
}
};
它应该是现金类别数据。
答案 3 :(得分:1)
所以,你需要的是这样的东西:
在控制器中创建2个方法,一个用于获取类别,另一个用于获取数据:
angular.module('yourApp').controller('yourCtrl', ['$scope', 'yourFactory', function ($scope, yourFactory) {
$scope.initPage = function () {
$scope.getCat();
$scope.getData();
}
$scope.getCat = function () {
...
}
$scope.getData = function () {
...
}
$scope.initPage();
}]);
然后在你的html中,在应该重新加载数据的按钮/元素上,用ng-click调用你的方法
<div>
<button ng-click="getData"> reload </button>
</div>
如果您想对每个类别进行排序,您可以执行以下操作:将getData(类别)的参数添加到您希望过滤数据的类别,然后在您的html中
<ul>
<li ng-repeat="cat in categories"> <a ng-click="getData(cat)"> {{ cat.name }} </a> </li>
</ul>
希望有所帮助