考虑我正在创建的这个对象。
$scope.formules = {};
$scope.formules = {
label: 'some label',
getYear: function() {
// getData() is a promise
$scope.getData().then(function(){
// Some code to get the right data
return someData;
}.catch(function () {
$scope.error = 'bad error';
}
}();
}
此时,getYear未定义,显而易见,因为我必须做第二次返回。
$scope.formules = {};
$scope.formules = {
label: 'some label',
getYear: function() {
// getData() is a promise
$scope.getData().then(function(){
// Some code to get the right data
return someData;
}.catch(function () {
$scope.error = 'bad error';
}
return $scope.getData(); //Putting the second return here
}();
或更短的方式可能是这样的:
$scope.formules = {
label: 'some label',
getYear: function() {
// getData() is a promise
return $scope.getData().then(function(){ // Or putting the second return here.
// Some code to get the right data
return someData;
}.catch(function () {
$scope.error = 'bad error';
}
}();
再次这不是正确的方法,因为第二个返回只返回了promise,所以我的方法getYear
现在包含一个promise,而不是正确的方法。
上次尝试:
$scope.formules = {
label: 'some label',
getYear: function() {
// getData() is a promise
return $scope.getData().then(function(){ // return the $scope.getData()
// Some code to get the right data
return someData;
}.catch(function () {
$scope.error = 'bad error';
}
}().then(function(data){ return data; });
现在我没有运气和想法,console.log($scope.formules)
再次告诉我,getYear是一个承诺,并不会给我价值。
注意:如果我执行console.log(data)
而不是return data;
,我确实得到了我想要绑定到该方法的值。
我在这里做错了什么,绑定价值的正确方法是什么?堆栈&谷歌没有给我任何答案......
修改
以下是我在方法中使用的实际代码:
getYear: function () {
$scope.measure = value.formules_total_year;
$scope.getCube().then(function(test){
var totalRatioData = [];
for (var i = 0; i < $scope.tempData.length; i++){
totalRatioData.push($scope.tempData[i][1].qNum);
}
return totalRatioData;
})
}(),
$ scope.tempData是一个包含5个数组的数组。 [Array[2], Array[2], Array[2], Array[2], Array[2]]
,在这5个数组中,您有2个对象
0: Object
qElemNumber: 0
qNum: 2009
qState: "O"
qText: "2009"
__proto__: Object
1: Object
qElemNumber: 0
qNum: 225632.21000000002
qState: "L"
qText: "225632,21"
我想要的是你在这个编辑中看到的是5个数组的最后一个对象的所有qNum的新数组,并将此数组赋值给getYear。
答案 0 :(得分:0)
有点难以理解你最终想要达到的目标以及你为什么要“绑定”你的getYear()函数中的所有$ scope赋值。在我看来,就像你试图同步返回异步值(totalRatioData)一样。这里的要点是,es5不可能实现这一点。 es7将提供一种名为“await”的新方法,以实现这一目标。
如果要在视图中使用getYear的值,只需将promise的值传递给视图模型($ scope变量)。
// init ctrl
$scope.year = null;
_initYears();
function _initYears() {
$scope
.getData()
.then(
function() {
var totalRatioData = [];
for (var i = 0; i < $scope.tempData.length; i++){
totalRatioData.push($scope.tempData[i][1].qNum);
}
// assign data to year
$scope.year = totalRatioData;
}
)
;
}
如果您正在使用ui-router,我建议您将您的承诺放在州状态配置的所需部分,以确保在状态激活之前解决。
希望有所帮助
答案 1 :(得分:0)
您不应该在范围属性中调用数据,而应该在控制器中调用数据。
<span ng-bind="formules.label"></span>
<span ng-bind="formules.year"></span>
然后绑定到范围属性
json_decode('["foo","bar"]', true)