2016-11-24 49 views
0

我一直在使用的Moodle的WS的angularjs web应用程序来获取信息,我有一个变量的一个小问题,我想从一个$http.得到一个变量,我看见你可以使用服务作为一个选项或$rootscope,但对我来说没有工作。

我有两个控制器,我想通过$scope.useridcursostCtrl

app.controller('userCtrl', function ($scope, $http) { 



    field = '&field=username'; 
    values = '&values[0]=adminaccap'/*+$scope.username*/; 


    url = concatUrl + 'core_user_get_users_by_field' + field + values; 


    $http.get(url).then(function (response) { 
     $scope.items = response.data; 
     $scope.userid = response.data[0].id; 
    }) 

    return $scope.userid; 

}); 


app.controller('cursostCtrl', function($scope, $http){ 

    url2 = concatUrl + 'core_enrol_get_users_courses' + '&userid=' + $scope.userid; 

    $http.get(url2).then(function (response) { 
     $scope.cursos = response.data; 
     $scope.nombrecurso = response.data[0].fullname; 
    }) 

您的帮助谢谢!

+0

尝试用$ rootScope,您可以使用一个服务也或某种形式的卖场方法 –

+0

我试过,但我认为$ HTTP。没有返回'$ scope.userid' – rfcabal

回答

2

着这里的办法是撒施从一个控制器事件和处理其他控制器

事件在您userCtrl广播一个事件rootScope为您cursostCtrl也遵循

app.controller('userCtrl', function ($rootScope,$scope, $http) { 

     field = '&field=username'; 
     values = '&values[0]=adminaccap'/*+$scope.username*/; 
     url = concatUrl + 'core_user_get_users_by_field' + field + values; 

     $http.get(url).then(function (response) { 
      $scope.items = response.data; 
      $scope.userid = response.data[0].id; 
      $rootScope.$broadcast("myBroadCastedEvent",{myUser:$scope.userid}); 
     }) 

     return $scope.userid; 

    }); 

获得广播的活动范围在如下

app.controller('cursostCtrl', function($scope, $http){ 
    $scope.$on("myBroadCastedEvent", function (event, args) { 
       $scope.userid = args.myUser; 
      }) 

    url2 = concatUrl + 'core_enrol_get_users_courses' + '&userid=' + $scope.userid; 

    $http.get(url2).then(function (response) { 
     $scope.cursos = response.data; 
     $scope.nombrecurso = response.data[0].fullname; 
    }) 
+0

我仍然在'$ scope.userid'中找到'undefined'。 – rfcabal

+0

如果我在'$ scope.on'里面做'alert',我得到'$ scope.userid',但在'url2'中是未定义的。有没有办法从'$ scope.on'中取出它? – rfcabal

+0

检查最新的edit.Also检查是否第一个控制器的$ http服务在sucess返回'$ scope.on'内的userid –

2

你可以像如下广播HTTP成功后的事件 -

在控制器1 -

$http.get(url).then(function (response) { 
     // assuming you need response in another controller 
     $rootScope.$broadcast('GotResponse',response); 
    }) 

在控制器2 -

$scope.$on('GotResponse', function(event,response){ 
    // this variable response is what you got from http 
    console.log('response--',response); 
}); 
相关问题