Если в числовых кадре НЕ все одинаковые столбцы, попробуйте следующее:
df = pd.DataFrame.from_dict(map(dict,df_list))
Вы можете убедиться, что обещание заканчивается, прежде чем назначать продукты в контроллере и не запускать fetchAll
несколько раз. Вы можете изменить службу:
serv.factory('shopService', function($q) {
//create the shop client as service varible
var client = window.ShopifyBuy.buildClient({
domain: 'xxxxxxx.myshopify.com',
storefrontAccessToken: 'xxxxxxxxxxxxxxxxx'
});
var products = [];
var fetchAllCompleted = false;
function getProducts() {
var deferred = $q.defer();
if (fetchAllCompleted) {
deferred.resolve(products);
} else {
client.product.fetchAll().then((products_complete) => {
//do things and get the products ready
products.push(item);
fetchAllCompleted = true;
deferred.resolve(products);
});
}
return deferred.promise;
}
return {
getProducts: getProducts
}
});
Затем в контроллере
serviceApp.controller('CartController', ['shopService', function CartController(shopService) {
//create a reference to the service variable
shopService.getProducts().then(function(products) {
this.products = products;
});
}]);
Это должно устранить ваши проблемы.
Если я правильно понимаю ваш вопрос, у вас мало обходных решений. Один из них - использовать $apply()
в вашем вызове ajax, что он будет делать? Иногда, когда обещание возвращается, значения не обновляются угловыми. и он вернет пустой объект. Вызвав $apply()
, вы можете обновить область действия. И второе обходное решение состоит в том, чтобы сначала вызвать службу и отправить ваш запрос, а затем сделать функцию возврата, которая вернет объект, который вы только что вызвали в службе выше. концепция Setter и Getter, я использую этот подход, я использую одну функцию, чтобы получить данные, а другой - для получения данных. Последнее, что вы можете попробовать, - подождать, пока данные не попадут в ваш объект, а затем вернут его. когда вы используете ng-repeat, если служба вызывается каждый раз, ng-repeat
не будет работать, сначала получите все данные в одном объекте, а затем вызовите это obj, имея в виду, что вы будете звонить только один раз в контроллер. и эта служба вернет вам ваши данные до ng-repeat.
попытайтесь убедиться, что служба запущена и запущена / возвращена базовые данные .. затем проверьте этот пример:
https://plnkr.co/edit/l7lGPRIs0ZuDWpVK2pX8?p=preview
Угловой JS
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link href="animations.css" rel="stylesheet" type="text/css">
<script src="//code.angularjs.org/snapshot/angular.min.js"></script>
<script src="//code.angularjs.org/snapshot/angular-animate.js"></script>
<script src="script.js"></script>
</head>
<body ng-app="ngRepeat">
<div ng-controller="repeatController">
I have {{friends.length}} friends. They are:
<input type="search" ng-model="q" placeholder="filter friends..." aria-label="filter friends" />
<ul class="example-animate-container">
<li class="animate-repeat"
ng-repeat="friend in friends">
[{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
</li>
<li class="animate-repeat" ng-if="results.length === 0">
<strong>No results found...</strong>
</li>
</ul>
</div>
</body>
</html>
Объект JS:
(function(angular) {
'use strict';
angular.module('ngRepeat', ['ngAnimate']).controller('repeatController', function($scope) {
$scope.friends = [
{name:'John', age:25, gender:'boy'},
{name:'Jessie', age:30, gender:'girl'},
{name:'Johanna', age:28, gender:'girl'},
{name:'Joy', age:15, gender:'girl'},
{name:'Mary', age:28, gender:'girl'},
{name:'Peter', age:95, gender:'boy'},
{name:'Sebastian', age:50, gender:'boy'},
{name:'Erika', age:27, gender:'girl'},
{name:'Patrick', age:40, gender:'boy'},
{name:'Samantha', age:60, gender:'girl'}
];
});
})(window.angular);