2017-11-11 30 views
1

私はAngularJSを初めて使いました。これは私の最初の質問です。私はこの問題の可能な答えをたくさん読んできましたが、解決策は見つかりませんでした。工場からコントローラにデータを返す

;(() => { 
app.factory('Users', users) 
users.inject = ['$state', 'UserServices'] 

function users($state, UserServices) { 
    users.users = []; 
..... 
    users.activeDeactive = (userId, activate) => { 
    UserServices.activeDeactive(userId, activate).then(
     response => { 
      console.log(response); //it shows "{status: 0}", which is the desired value 
      return response; 
     } 
    ) 
    } 

..... 
    return users; 
} 
})() 

をそして、この私のコントローラでは:私は私の工場でこれを持っている(私は重要な部分は、ドット間だと思う)私も取得できますか

;(() => { 
app.controller('UsersCtrl', usersCtrl); 

function usersCtrl($scope, $state, Users, users, vendors, profiles, clients) { 
    Users.users = users; 
..... 
    $scope.activeDeactive = function(userId, activate) { 
     var response = Users.activeDeactive(userId, activate); 
     console.log(response); //it shows undefined 
    } 
..... 
    }; 
})(); 

「{状況:0}」コントローラーで?私は長い間これに固執しています...私はデータを解決するためのサービス、約束を待つことなどについて読んだことがありますが、私はこの問題がはるかに簡単だと思います。既にこの工場にサービス情報を送ることができました...問題は現在、工場のデータをコントローラに送信することです...ありがとうございます!

答えて

0

以下の構文をコントローラで使用します。あなたのコードがうまくいかない理由は、あなたがController.AccessDeactiveというサービスを書きましたが、あなたはそれをコントローラから呼び出していますが、応答を待っているわけではありません。応答を待つことは非常に重要です。サービスコールが成功すると、サービスコールが実行されます。ここでは、与えられた構文のように応答を捕捉する必要があります。 エラーの場合は、エラー部分に移動します。

;(() => { 
    app.controller('UsersCtrl', usersCtrl); 

    function usersCtrl($scope, $state, Users, users, vendors, profiles, clients) { 
     Users.users = users; 
    ..... 
     $scope.activeDeactive = function(userId, activate) { 
      Users.activeDeactive(userId, activate).then(function(data){ 
     response = data; 
console.log(response); 
    }, 
    function(error){ 
     console.log(error); 
    }); 

    ..... 

    }; 
})(); 
+0

ありがとうございます!今私は理解しています...私は "待っている"応答の問題に関連していたので、私はタイトルを変更します。 –

+0

@SergioHernándezElvira:Cool :)役に立ったら答えをアップアップしてください。 –

+0

私は15の評判ポイントを持っていないので、まだできません:/それについては申し訳ありません。 –

0

工場出荷時の返品約束。

users.activeDeactive = (userId, activate) => { 
return UserServices.activeDeactive(userId, activate).then(
    response => { 
     console.log(response); 
     return response; 
    } 
) 
} 

となり、コントローラメソッドは受け入れ可能オブジェクトに変更されます。

$scope.activeDeactive = function(userId, activate) { 
    Users.activeDeactive(userId, activate).then(response =>{ 
    console.log(response); 
}); 
} 

理由は次のとおりです。UserServiceは、ユーザーファクトリにあるようにayncメソッドを使用します。コントローラメソッドはユーザファクトリメソッドを呼び出し、イベントループに入るときにユーザサービスがデータを返すまで待機しません。ユーザーファクトリメソッドから戻り値を返すようにします。

+0

ありがとうPratik! Rakeshとコードの両方が動作します。 –

関連する問題