0

だから、これは私の工場コードです:

app.factory('simpleFactory', function ($http) {
   var factory = {}; 

     factory.getArray = function (srchWord) {

         **Here i have a code that uses $http to fill a array called result with values.

           return result;
      };

    return factory;
});

そして、これは私のスコープ内のコードです:

 $scope.search = function() {

        $scope.arrayValue = simpleFactory.getArray($scope.searchWord);

        $scope.booleanValue = ($scope.arrayValue.length <= 0); // <-- PROBLEM! This gets executed before getArray() is finished.

 };

私の問題は、値フォームを取得する $scope.booleanValue = ($scope.arrayValue.length <= 0)前に実行されることです。 したがって、私の質問は、getArray 関数が終了してコードを起動するまで待つ方法です。$scope.arrayValue$simpleFactory.getArray($scope.searchWord)

$scope.arrayValue = simpleFactory.getArray($scope.searchWord);
4

2 に答える 2

1

ブール値を getArray 関数のコールバックとして設定するか、arrayValue にウォッチを設定し、それに基づいて booleanValue を更新することができます。

$scope.search = function() {

    simpleFactory.getArray($scope.searchWord, function(result) {
        $scope.arrayValue = result;
        $scope.booleanValue = ($scope.arrayValue.length <= 0);
    });

    // or

    // initialize the value
    $scope.arrayValue = [];

    // *then* set the value, so it triggers the change on the $watch below    
    $scope.arrayValue = simpleFactory.getArray($scope.searchWord);

    $scope.$watch('arrayValue', function(newValue,oldValue) {
        $scope.booleanValue = (newValue.length <= 0);
    });

 };
于 2013-10-16T13:51:29.967 に答える
1

まずpromise、ファクトリ メソッドからa を返しgetArrayます。

app.factory('simpleFactory', function ($http) {
   var factory = {}; 

     factory.getArray = function (srchWord) {

         return $http.query(....);  // this returns promise;
      };

    return factory;
});

次に、then を使用して promise が解決されるのを待ちます。

scope.arrayValue = simpleFactory.getArray($scope.searchWord).then(function(data) {
   $scope.arrayValue=data;
   $scope.booleanValue = ($scope.arrayValue.length <= 0);
});

promise何が何であるか、どのように使用するかについて読んで$httpください。

于 2013-10-16T13:48:36.263 に答える