Javascript 解析工厂构造函数中的Restangular.get
我正在使用Restanglar管理对Angular应用程序中RESTful后端的访问。下面的调用将获取后端中的所有结果Javascript 解析工厂构造函数中的Restangular.get,javascript,angularjs,restangular,Javascript,Angularjs,Restangular,我正在使用Restanglar管理对Angular应用程序中RESTful后端的访问。下面的调用将获取后端中的所有结果 Restangular.all('results').getList().then(function(results) { $scope.results = results; }); 我已经使用extendModel函数将原型函数添加到一些后端模型中,因此在将结果返回给我之前,它们会运行此函数 Restangular.extendModel('results', fun
Restangular.all('results').getList().then(function(results) {
$scope.results = results;
});
我已经使用extendModel函数将原型函数添加到一些后端模型中,因此在将结果返回给我之前,它们会运行此函数
Restangular.extendModel('results', function(model) {
var result = new Result(model);
return result;
});
我的工厂是这样的
angular.module('RankingsApp')
.factory('Result', function(Extender, Restangular, $rootScope) {
function Result(model) {
angular.extend(this, model);
Restangular.one('fencers', this.links.fencer).get().then(function(response) {
this.fencer = response;
});
};
Result.prototype.Fencer = function() {
return this.fencer;
};
return Result;
});
我添加到结果中的一个函数是返回与结果关联的Fencer。然而,当我从结果构造函数内部进行异步调用时,值似乎被设置了。我的假设是,这是因为调用的异步性质,但我目前不知道如何实际修复它
Fencer函数在我的UI中用于显示一些附加信息
<tr ng-repeat='result in results'>
<td>{{result.Fencer().name}}</td>
</tr>
如果您的UI依赖于数据,我会在模块的解析配置中使用一个函数来获取数据,然后有条件地处理用户,即成功或失败 延期承诺的简单示例:
function config($stateProvider) {
$stateProvider
.state('fencer', {
url: '/fencer/result',
controller: 'FencerCtrl',
resolve: {
resultService: function getFencerResult($q, dataservice, sessionService) {
var deferred = $q.defer();
var myData = {};
myData = dataservice.getFormDefaults();
deferred.resolve(myData);
return deferred.promise;
}
}
});
}
更新的控制器代码:
等待控制器从资源更新
用于旋转图标
<tr ng-repeat='result in results'>
<td ng-show="results.length < 1"> <i class="fa fa-spinner fa-pulse"></i> Loading</td>
<td ng-show="results.length>0">{{result.Fencer().name}}</td>
</tr>
所以我终于想出了一个办法让它发挥作用。在我最初的构造器中,我设置了击剑者
function Result(model) {
angular.extend(this, model);
Restangular.one('fencers', this.links.fencer).get().then(function(response) {
this.fencer = response;
});
};
为了解决这个问题,我需要创建一个setter函数,并将其附加到我已经存在的Fencer上
Result.prototype.Fencer = function(fencer) {
if(fencer)
{
this.fencer = fencer;
}
return this.fencer;
};
我已经更新了我的问题,包括如何从后端获取初始结果列表,并添加了更多关于我的应用程序流程如何工作的描述。当然。我用你的控制器代码更新了我的答案。试试看。在另一个事件发生之前,您的摘要周期似乎不会被触发,从而延迟对视图的更新。将调用包装在$scope中。$apply会触发已在进行的操作。。另一种方法是让你的用户界面处理等待资源的问题啊,我认为我们在不同的路径上,我能够毫无问题地返回结果。我的问题是,在我得到结果后,我将其传递到一个工厂,在工厂内,我正在对后端进行另一个调用,并尝试将其附加到原始结果。我本可以用更好的措辞。我会看看是否可以重构我原来的问题
Result.prototype.Fencer = function(fencer) {
if(fencer)
{
this.fencer = fencer;
}
return this.fencer;
};