2017-01-27 10 views
0
각도

에 multilple 번 호출되고 난 다음의 각 서비스에게 난 그냥 각도 배우고 있어요,하지만 난 지금에 data.UserName을 사용할 수 있도록 원하는서비스

//SERVICES 
app.service('userInfo', function($http){ 
    this.getInfo = function() { 

     var BASE_URL = ""; 
     var requestUrl = BASE_URL + "/getmyproperties"; 
     return $http({ 
        'method': 'GET', 
        'url': requestUrl, 
        'headers': { "Accept": "application/json; odata=verbose"} 
       }).then(function(response){ 
        console.log(response.data.d); 
        var userName = response.data.d.DisplayName.split(','); 

        var data = { 
         firstName: userName[1], 
         userImage: response.data.d.PictureUrl, 
         lanID: response.data.d.AccountName 
        }; 

        return data; 

       }).catch(function(e){ 
        console.log("Error: ", e); 
       }); 
    } 
}); 

어쩌면 내가 잘못 이해 한 서비스가 애플 리케이션의 여러 장소, 그래서 내가 서비스를 사용할 수있는 줄 알았지 만, 서비스 기능이 두 번 실행됩니다 - 내가 싫어, 내가 어떻게 가치를 가져 와서 그것을 사방에 사용할 수 있습니까? 중첩 된 컨트롤러를 사용해야합니까?

//NAV CONTROLLER 
app.controller('navBarController', function($scope, userInfo) { 
    userInfo.getInfo().then(function(data) { 
     $scope.user = data; 
    }); 
}); 
//END NAV CONTROLLER 

//TASK CONTROLLER 
app.controller('taskController', function($scope, userInfo) { 
    userInfo.getInfo().then(function(data) { 
     $scope.test = data; 
    }); 
}); 

답변

2

getInfo 메서드는 webservice를 호출합니다. 그래서 당신이 메서드를 호출 할 때마다 webservice가 호출됩니다. 해결책은 웹 서비스에서 얻은 정보를 userInfo 서비스의 변수에 저장하는 것입니다. 그런 다음 getInfo에서 먼저 정보가 모두로드되어 있는지 확인합니다. 그렇다면 반환하십시오. 그렇지 않다면 웹 서비스에 전화하십시오. 어떻게 보이는지에 대한 간단한 예 :

app.service('userInfo', function($http){ 
    var userInfo = undefined; 
    this.getInfo = function() { 
     var BASE_URL = ""; 
     var requestUrl = BASE_URL + "/getmyproperties"; 
     if(userInfo) { 
      var deferred = $q.defer(); 
      deferred.resolve(userinfo); 
      return deferred.promise; 
     } 
     return $http({ 
       'method': 'GET', 
       'url': requestUrl, 
       'headers': { "Accept": "application/json; odata=verbose"} 
      }).then(function(response){ 
       console.log(response.data.d); 
       var userName = response.data.d.DisplayName.split(','); 

       userInfo = { 
        firstName: userName[1], 
        userImage: response.data.d.PictureUrl, 
        lanID: response.data.d.AccountName 
       }; 

       return userInfo; 

      }).catch(function(e){ 
       console.log("Error: ", e); 
      }); 
    } 
}); 
+0

안녕하세요 - 작동하지 않는 것 같습니다. 실행될 때마다 userInfo가 재설정되기 때문입니까? –

+0

회선을 편집하는 것을 잊었습니다. Cache [id]는 userInfo로 대체되어야했습니다. 다시해볼 수 있니? – yadejo

+0

고마워.하지만 여전히 두 번 호출된다. –