我有这个控制器用于保存个人的一些细节。我有一个单独的存储库EntityRepository,其中定义了一个从数据库中获取用户性别的函数。
函数响应正常工作,当我在函数响应中的控制台上打印性别时,它可以工作(console.log(" inside:",$ scope.userGender);)。
但是在函数之外,我没有得到值(console.log(" outside:",$ scope.userGender);)
.controller('individualDetailsCtrl', function($scope, $rootScope, $location, EntityRepository) {
$scope.userGender = "";
$scope.entity = {
name: "",
gender: $scope.userGender,
dob: "",
pan: ""
};
EntityRepository.getUserGender()
.then(function(response){
$scope.userGender = response.data.gender;
console.log("inside : ", $scope.userGender);
})
.catch(function(errorResponse) {
$scope.error = errorResponse.data
});
console.log("outside : ", $scope.userGender);
});
我想在$ scope.entity.gender中保存响应中的性别,但我无法在函数范围之外访问$ scope.userGender的值。
由于$ scope是在控制器的范围内定义的,我认为它应该能够在函数响应之外访问它的值。
答案 0 :(得分:1)
您无法在AJAX成功回调之外访问<table id="table" class="table">
<tr>
<th>Messages</th>
<th>Problem Description</th>
<th>Doctor's Answer</th>
<th></th>
</tr>
<tr>
<th><select id="title">
<?php
$sql="select title from messages where paitient_id=(select id from login where username='".$username."');";
$result=mysqli_query($conn,$sql);
while($row=mysqli_fetch_array($result))
{
?>
<?php echo "<option value=\"mesazhi1\">".$row[0]."</option>";}?>
</select>
</th>
<td><textarea rows="17.95" col="100" id ="question" > </textarea></td>
<td><textarea rows="17.95" col="100" id ="answer" readonly> </textarea></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td><input type="button" name="openmessage" value="Display Selected Message" onClick="process()"></td>
</tr>
</table>
</form>
的值的原因很简单:AJAX是异步的,这意味着只有在此AJAX调用成功后才会分配此变量的值。您应该调整代码,使其在此AJAX调用成功之前不依赖于$scope.userGender
的值。如果此值是绑定到标记中某个控件的数据,那么这不是问题,当从服务器检索值时,该值将显示一点延迟。
答案 1 :(得分:0)
由于请求的异步属性,您无法访问外部值。这只是意味着这句话:console.log("outside : ", $scope.userGender);
,正在.then(function(){ ... })
之前执行。
修正:
$timeout
.controller('individualDetailsCtrl', function($scope, $rootScope, $location, EntityRepository, $timeout) {
和
$timeout(function() {console.log("outside : ", $scope.userGender)});
$scope.userGender
。.then(function() { })
的值
醇>
答案 2 :(得分:0)
你能试试吗?
$scope.GetUserGender = function(){
EntityRepository.getUserGender().then(function(response){
$scope.userGender = response.data.gender;
console.log("inside : ", $scope.userGender);
}).catch(function(errorResponse) {
$scope.error = errorResponse.data
});
}
$scope.GetUserGender(); //
console.log("outside : ", $scope.userGender);
希望这会奏效:)