>  Q&A  >  본문

angular.js - angularjs中关于异步加载的数据在controller之间共享的问题?

app.factory('userService', ['$http', function ($http) {
         var userService= {},
                                    
         userService.getUsers = function () {                    
             return $http.get('getUsers');
         }     
         userService.users =[];                                       
         return userService;
 }]);

app.controller("FirstController",["$http","userService",function($http,userService){
       userService.getUsers().success(function (users){
           userService.users = users;//在SecondController得不到数据
       })
       //userService.users=[1,2,3] 如果我这样更新数据,在SecondController可以获得数组[1,2,3]

  }])
app.controller("SecondController",["$http","userService",function($http,userService){
   //userService.users 此得到的为空数组 
    //但是console.log(userService) 可以看到userService.users中有数据

  }])
某草草某草草2713일 전546

모든 응답(5)나는 대답할 것이다

  • PHPz

    PHPz2017-05-15 17:01:38

    $http 요청은 비동기 작업이므로 SecondController를 실행할 때 이때 데이터를 얻었는지 보장할 수 없습니다

    회신하다
    0
  • PHP中文网

    PHP中文网2017-05-15 17:01:38

    $http를 자신의 서비스에 추가하려면 $q 및 promise 모드를 이해해야 합니다. 이때 동기적 사고를 사용하여 비동기 작업을 수행하는 것과 같습니다.

    회신하다
    0
  • 某草草

    某草草2017-05-15 17:01:38

    저희 프로젝트에는 이런 문제가 많습니다. 제가 현재 해결하고 있는 솔루션에 대해 간단히 말씀드리겠습니다. 위와 같이 서비스가 캡슐화되며, 데이터를 요청하기 위해 HTTP가 사용됩니다. 데이터가 반환되면 복사본이 캐시에 저장됩니다. 데이터가 필요한 모든 컨트롤러는 데이터 일관성을 보장하기 위해 이 서비스를 사용합니다.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-05-15 17:01:38

    일반적으로 서버를 캡슐화할 때 Promise를 기본적으로 사용합니다. (권장 연습)

    질문자가 Promise 사용을 원하지 않는 경우 콜백을 사용하면 문제를 해결할 수도 있습니다.

    또 다른 아이디어는 이벤트 알림을 사용하는 것입니다. 서버가 데이터를 획득하면 이벤트를 사용하여 컨트롤러에 알립니다.

    회신하다
    0
  • 仅有的幸福

    仅有的幸福2017-05-15 17:01:38

    위층에서 콜백을 사용하여 해결할 수 있다고 했는데요. 코드가 도움이 되기를 바랍니다.

    send()는 첫 번째 컨트롤러에서 입력 값을 동적으로 얻기 위한 키업 이벤트입니다

    으아악

    회신하다
    0
  • 취소회신하다