如何在工厂内传递和修改$ scope / context?

时间:2016-02-25 14:54:39

标签: javascript angularjs

我有一个简单的角度工厂来访问API和许多不同的控制器。如果$http.error()被触发,我想将错误data传递给控制器​​,其中appBackend被触发(在相应的模态中显示正确的错误)并在新调用时清除此错误开始:

angularApp.factory('appBackend', function($http, APP_CONFIG, APP_ERROR_CODE) {
  // clear code, i.e. $scope.error = null;
  return function(model, method, data) {
    return $http.post(APP_CONFIG.API_PATH + '/' + model + '/' + method, data).error(function (data) {
      // pass code i.e. $scope.error = data;
  };
});

尝试apply(),但收到appBackend(...).apply is not a function。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您需要在正在使用的控制器中注入工厂。您可以简单地从factory传递成功错误或访问controller本身中的>成功错误,如下所示。将api调用绑定到函数将覆盖以前的$scope变量。

 angular.module('myApp', []).controller('checkController', function($scope, faceOfffactory) {

        var registerdata = {
            grant_type: 'password',
            UserName: $scope.signupData.username,
            Password: $scope.signupData.password,
            Phone: $scope.signupData.phone,
            Email: $scope.signupData.email,
        };

       $scope.signUp = function(){
        faceofffactory.signUp(registerdata).success(function(data) {
                console.log(data);
                $scope.message = data.status;
                $state.go('.',null,{reload:true});//to reinitialize your controller.
            })
            .error(function(data, status, headers, config) {
                console.log("http error", data);
                $scope.message = "failure";
            });
          }
        })
        .factory('faceofffactory', function($http, $sessionStorage, ) {

            var urlBase = 'http://apple.com:7071';
            var lastId;

            return {
                signUp: function(registerdata) {

                    return $http({
                        method: 'POST',
                        url: urlBase + '/api/Account/Register',
                        data: registerdata,
                    })
                }
            }
        })