2013-07-30 10 views
6

używam kodu wykonać, aby uzyskać json obiekt i związać go do $ zakresu

PRACA KOD:

$http({ 
    url: '/Home/GetJson', 
    method: "GET", 
    params: { 
     clientID: cId 
    } 
}).success(function (data) { 
    $scope.members = data.members; 
}) 

Działa .. co bym jak zrobić, to uzyskać wyniki w var data, a następnie dodać je do zakresu $.

BRAKIEM KOD:

var data = $http({ 
    url: '/Home/GetJson', 
    method: "GET", 
    params: { 
     clientID: cId 
    } 
}).success(function (data) { 
    return data.members; 
}) 

$scope.members = data; 

Kiedy patrzę na $ scope.members, jest pusta w przypadku jego braku kodu, ponieważ $ scope.members jest pusty, gdy jest wypełniona (js to wydarzenie oparte).

Jak mogę poczekać, aż json wróci> to var = data>, a następnie $ scope.members = data?

KODEKS PRACY

użyłem Javascript funkcje zwrotne jak poniżej

Zadzwoń moim głównym zadaniem

DoLogin($scope, $http, email, password, AssingMemberToScope); 


function DoLogin($scope, $http, email, password, callback) { 
$http({ 
    url: '/Home/GetJson', 
    method: "GET", 
    params: { 
     clientID: cId 
    } 
}).success(function (data) { 
    callback($scope, data); //<----- Call Back occurs 
}) 
} 

// - Call-back roboczego Funkcja i kod jest oddzielone -/

function AssingMemberToScope($scope, data) { 
    if (data.msg) { 
     $('.loading').hide(); 
     $scope.member = data.member; 
    } else { 
     $('.loading').hide(); 
     $('#msg').show(); 
    } 

} 
+0

Robisz to poprawnie w pierwszej próbce przez przypisanie jej w wywołaniu zwrotnym, po co ją zmieniać? – tymeJV

+0

Chciałem umieścić całe wywołanie json w oddzielnej funkcji i zwrócić dane do funkcji, dzięki czemu mogę zrobić kilka rzeczy do niego. –

Odpowiedz

7

Myślę, że lepszym podejściem byłoby umieszczenie wywołania JSON w funkcji, która akceptuje funkcję callback jako parametr. Krótki przykład:

function makeJSONCall(callback) { 
    $http({ 
     url: '/Home/GetJson', 
     method: "GET", 
     params: { clientID: cId } 
    }).success(function (data) { 
     callback(data); 
    }); 
} 

function someFunctionCallback(param) { 
    console.log(param) 
} 

Teraz wewnątrz tego callback funkcji, co chcesz zrobić z danymi. Możesz także wywołać funkcję JSON, kiedy jej potrzebujesz, wystarczy prosty makeJSONCall(someFunctionCallback).

+0

Podoba mi się ta odpowiedź. Obietnice są bardzo fajne, ale dodają złożoności. Jest to znacznie prostsze podejście, które prawdopodobnie zadziała w większości sytuacji. –

+0

@tymeJV - Zaktualizuj post z działającym kodem .. dzięki! –

+1

.success() został zdeprecjonowany w Angular 1.4 zaimplementował go wtedy() –

2

rzeczywiście wyjaśnia to sam w swoim ostatnim zdaniu, można użyć obietnice i ich następnie() callback

var data = $http({ 
url: '/Home/GetJson', 
method: "GET", 
params: { clientID: cId } 
}) 
.then(function (data) { 
    return data.members; 
}) 
}; 

... 
... 
data.then(function(response){ 
    //play with the data 
    $scope.data=response 
}) 
8

Spróbuj tego wzoru:

angular.module('App').factory('service', function ($http) { 
    var service = { 
     myFunction: function (query) { 
      var promise = $http({ 
       url: '/Home/GetJson', 
       method: "GET", 
       params: { 
        clientID: cId 
       } 
      }).success(function (data) { 
       return data.members; 
      }); 
      return promise; 
     }; 
    } 
}); 

Wtedy kiedy konsumować usługę, czy

service.myFunction(query).then(function (data) { 
    $scope.members = data.members; 
}); 
+0

Przyjemne podejście, +1 – tymeJV

+1

@Zsong co robi tu metoda sukcesu? Nie zwraca on danych users.members do konsumenta (skoro trzeba znowu pisać data.members) – Todilo