如何在其定义的范围之外使用角度范围变量

时间:2015-02-20 08:23:47

标签: angularjs

我有一个像下面这样的服务,它从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未定义?

2 个答案:

答案 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;
    });