我有一个像下面这样的服务,它从RESTful(Laravel)API获取学生的id
并返回它。
.factory('Student', function($http)
{
return {
getId: function(adm_no) {
return $http.post('/api/student/getId',{adm_no:adm_no})
.then(function(response)
{
return response.data;
},
function(httpError)
{
Notifier.error(httpError.data.error.message,'Error ' + httpError.status + " Encountered");
});
}
}
}
)
然后我在控制器中使用它如下。
$scope.adm_no = 98;
Student.getId($scope.adm_no)
.then(function(response)
{
$scope.id = response;
});
// probably i want to use the `$scope.id` when a particular event takes place (or even in another query to the server alltogether), but outside the above function scope e.g.
$scope.showId = function()
{
alert($scope.id);
};
现在,问题是我如何使用范围之外的“本地范围”中声明的范围变量,上面的用法表明$scope.id
未定义?
答案 0 :(得分:1)
您的$scope.id
在功能$scope.showId()
中未定义,因为当您调用提醒功能时,您的帖子请求尚未完成,因此$scope.id
尚未初始化(这是异步执行的)。试试这个:
$scope.showId = function() {
if ($scope.id) {
alert($scope.id);
}
};
无论如何,在这种情况下你不必使用$rootScope
。来自id
的您的财产$scope
可从您的整个控制器访问。你必须等待ajax post请求而不是它被初始化。
答案 1 :(得分:0)
取代$ scope,你必须使用$routescope
变量来获取其他地方的id as-
Student.getId($scope.adm_no)
.then(function(response)
{
$routescope.id = response;
});