角度/Javascript范围
我试图公开从承诺的成功方法中获得的数据。简而言之,我不知道如何获取角度/Javascript范围,javascript,angularjs,angularjs-scope,angular-promise,Javascript,Angularjs,Angularjs Scope,Angular Promise,我试图公开从承诺的成功方法中获得的数据。简而言之,我不知道如何获取$scope.storedData。就目前而言,它是未定义的 genericService.js genericController.js 如何将$scope.storedData公开到storeData()或genericService.success()之外的范围 注意:我不想使用$watch。我想从角度上解决这个范围问题。。。因为这应该是可能的。我通常会做两件事: 我使用的模型定义了预期的响应,通常会使用空模型初始化控制器
$scope.storedData
。就目前而言,它是未定义的
genericService.js
genericController.js
如何将$scope.storedData
公开到storeData()
或genericService.success()
之外的范围
注意:我不想使用
$watch
。我想从角度上解决这个范围问题。。。因为这应该是可能的。我通常会做两件事:
myApp.controller('genericController', GenericController);
GenericController.$inject = [
'$scope',
'genericService'
];
function GenericController(
$scope,
genericService
) {
$scope.loadData = loadData;
$scope.storeData = storeData;
init();
///////////////////
function init() {
$scope.isLoaded = false;
$scope.storedData = {}; // if you use a model class, a new instance of this works best.
}
function loadData() {
genericService.success(function(data){
$scope.storeData(data);
$scope.isLoaded = true;
});
}
function storeData(whatever) {
$scope.storedData = whatever;
}
}
它是未定义的,因为genericService是异步的。一旦启动
success
回调,就会定义它。如果将记录器移动到回调中,您将看到它工作。但是,只要启动success
回调,我就会调用storeData()。一旦我进入storeData()内部,我就脱离了success
的上下文,您不能有2个success callback当然可以!我已经测试过了。它起作用了。我实际上是在promise=genericService.success('someurl')
上执行回调。因此,我将返回承诺,即$http.jsonp('http://foo.com/bar.json)
,到genericService()
(这是一个函数)。因此,执行genericService()
将返回一个承诺。承诺有两种方法:success()
和error()
。我只是在genericService.js中为suces()
方法提供一个回调,在genericscontroller.js中提供另一个回调。Travis,如果您要编写另一个函数printData(data){console.log(data);}
,并在genericService.suces()
方法完成执行后尝试执行此函数,是否会定义$scope.storedData
?您似乎已在storeData(无论什么)
中更改了$scope.storedData
的值。本质上,我想做的是将suces()
方法返回的数据存储到$scope.storedData
中,以便在服务器响应我的信息请求后,该数据可用。@fuzzybear3965:.success()
不会返回数据。不,这是,因为回调将异步执行。@Bergi,谢谢你用两句话澄清我的问题。老实说,我没有尝试答案。他们似乎不想工作。你的回答没有白费。你的链接让我得到了我现在正在阅读的所有链接:和[续…]和。
myApp.controller('genericController', ['$scope','genericService',
function($scope, genericService){
genericService.success(function(data){
$scope.storeData(data);
});
$scope.storedData; // Undefined here.
$scope.storeData = function(whatever){
$scope.storedData = whatever;
}
console.log('data stored is: ', $scope.storedData); // Still undefined
}]);
myApp.controller('genericController', GenericController);
GenericController.$inject = [
'$scope',
'genericService'
];
function GenericController(
$scope,
genericService
) {
$scope.loadData = loadData;
$scope.storeData = storeData;
init();
///////////////////
function init() {
$scope.isLoaded = false;
$scope.storedData = {}; // if you use a model class, a new instance of this works best.
}
function loadData() {
genericService.success(function(data){
$scope.storeData(data);
$scope.isLoaded = true;
});
}
function storeData(whatever) {
$scope.storedData = whatever;
}
}