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

Javascript 如何在工厂内传递和修改$scope/context?,javascript,angularjs,Javascript,Angularjs,我有一个简单的角度工厂来访问API和许多不同的控制器。如果触发了$http.error(),我想将错误数据传递给控制器,在控制器中触发了appBackend(在相应的模式中显示正确的错误),并在新调用开始时清除此错误: angularApp.factory('appBackend', function($http, APP_CONFIG, APP_ERROR_CODE) { // clear code, i.e. $scope.error = null; return function(

我有一个简单的角度工厂来访问API和许多不同的控制器。如果触发了
$http.error()
,我想将错误
数据
传递给控制器,在控制器中触发了
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不是函数。如何执行此操作?

您需要将工厂注入正在使用的控制器中。您可以简单地从
工厂
传递成功错误,或者访问
控制器
本身中的成功错误,如下所示。将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,
                    })
                }
            }
        })