2016-11-24 52 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); 
}); 
相關問題