Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从AngularJS中的另一个文件调用控制器?_Angularjs_Http Post - Fatal编程技术网

如何从AngularJS中的另一个文件调用控制器?

如何从AngularJS中的另一个文件调用控制器?,angularjs,http-post,Angularjs,Http Post,假设我有以下文件: JS1文件: var app = angular.module('myApp', []); app.controller('myCtrlOfJs1', function ($scope, $http) { $http.post("url", data).success(function(data, status) { $scope.hello = data; }) }) var app = angular.module('myApp', []); a

假设我有以下文件:

JS1文件:

var app = angular.module('myApp', []);
app.controller('myCtrlOfJs1', function ($scope, $http) {
   $http.post("url", data).success(function(data, status) {
      $scope.hello = data;
   })
})
var app = angular.module('myApp', []);
app.controller('myCtrlOfJs2', function ($scope, $http) {
   // $http.post("url", data).success(function(data, status) {
     // $scope.hello = data;
  // })
})
JS2文件:

var app = angular.module('myApp', []);
app.controller('myCtrlOfJs1', function ($scope, $http) {
   $http.post("url", data).success(function(data, status) {
      $scope.hello = data;
   })
})
var app = angular.module('myApp', []);
app.controller('myCtrlOfJs2', function ($scope, $http) {
   // $http.post("url", data).success(function(data, status) {
     // $scope.hello = data;
  // })
})
我不想把同样的
代码重写两次。然后我想在我的JS1文件中,在JS2文件中调用这个函数。可能吗

PS:这只是一个例子,我的代码比它的行多得多


感谢您的帮助。谢谢。

您可以随时使用以下服务:

编辑: 作为对你评论的回应:

嗯,它几乎可以在任何地方找到。看一看。有更多的风格指南,但我个人遵循这一条,它只是有意义的


您的视图根本不需要更改。

您可以随时使用服务:

编辑: 作为对你评论的回应:

嗯,它几乎可以在任何地方找到。看一看。有更多的风格指南,但我个人遵循这一条,它只是有意义的


您的视图根本不需要更改。

通常,您希望将像这样的常见功能分离到角度服务中:

在本例中,它可能如下所示:

var andyModule = angular.module('anyModule', []);

andyModule.factory('helloDataService', function($http) {
    var helloDataService = {
        // returns a promise
        getHelloData = function() {
            return $http.post("url", data)
        }
    };
    return shinyNewServiceInstance;
});
在你的控制器里

app.controller('myCtrlOfJs1', function ($scope, $http, helloDataService) {
    helloDataService.getHelloData().success((data)=> {
        $scope.data = data;
    })
})

通常,您希望将类似这样的常见功能分离到angular services中:

在本例中,它可能如下所示:

var andyModule = angular.module('anyModule', []);

andyModule.factory('helloDataService', function($http) {
    var helloDataService = {
        // returns a promise
        getHelloData = function() {
            return $http.post("url", data)
        }
    };
    return shinyNewServiceInstance;
});
在你的控制器里

app.controller('myCtrlOfJs1', function ($scope, $http, helloDataService) {
    helloDataService.getHelloData().success((data)=> {
        $scope.data = data;
    })
})

我将把它抽象为一个服务。服务对于网络通话等事情来说尤其有利

通过使用
angular.module(“app”,modules)
语法将创建一个名为app的应用程序,因此JS2文件将覆盖JS1中的模块。我怀疑你是有意的

angular.module("app", []);

var app = angular.module('myApp');
app.controller('myCtrlOfJs1', function ($scope, hello) {
  hello.post().then(data => scope.$hello = data);
});

var app = angular.module('myApp');
app.controller('myCtrlOfJs2', function ($scope, hello) {
  hello.post().then(data => scope.$hello = data);
});

app.factory("hello", function ($http) {
  // set data somehow
  return {
      post() {
        return $http.post("url", data);
      },
  };
});

这仍然会重复
范围。$hello
代码可能是您想要避免的。在这种情况下,您可以使用较新的
class
语法或通过原型从实现此功能的另一个控制器进行扩展。在这种情况下,我认为最好使用
controllerAs
而不是
$scope.

我会将其抽象为一个服务。服务对于网络通话等事情来说尤其有利

通过使用
angular.module(“app”,modules)
语法将创建一个名为app的应用程序,因此JS2文件将覆盖JS1中的模块。我怀疑你是有意的

angular.module("app", []);

var app = angular.module('myApp');
app.controller('myCtrlOfJs1', function ($scope, hello) {
  hello.post().then(data => scope.$hello = data);
});

var app = angular.module('myApp');
app.controller('myCtrlOfJs2', function ($scope, hello) {
  hello.post().then(data => scope.$hello = data);
});

app.factory("hello", function ($http) {
  // set data somehow
  return {
      post() {
        return $http.post("url", data);
      },
  };
});

这仍然会重复
范围。$hello
代码可能是您想要避免的。在这种情况下,您可以使用较新的
class
语法或通过原型从实现此功能的另一个控制器进行扩展。在这种情况下,我认为最好使用
controllerAs
而不是
$scope.

这是一种可以实现所需目标的方法。 不过我更喜欢服务方式

看看这个:

$controller

app.controller('myCtrlOfJs1', function ($scope, $http, helloDataService) {
    helloDataService.getHelloData().success((data)=> {
        $scope.data = data;
    })
})

希望它能帮助你

这是一种你可以实现你想要的目标的方法。 不过我更喜欢服务方式

看看这个:

$controller

app.controller('myCtrlOfJs1', function ($scope, $http, helloDataService) {
    helloDataService.getHelloData().success((data)=> {
        $scope.data = data;
    })
})

希望能有所帮助

谢谢您的回复,这很有趣,但我有一些疑问:这家工厂应该在哪里?在哪个文件中?1还是2?你将如何处理视图中的“调用”?例如:
?另一个控制器呢?谢谢你的回复,这很有趣,但我有一些疑问:这个工厂应该在哪里?在哪个文件中?1还是2?你将如何处理视图中的“调用”?例如:
?另一个控制器呢?谢谢你的回复,这很有趣,但我有一些疑问:这个工厂应该在哪里?在哪个文件中?1还是2?你将如何处理视图中的“调用”?例如:?另一个控制器呢?我还是不能让它工作。请看我的。谢谢你的回复,这很有趣,但我有一些疑问:这家工厂应该在哪里?在哪个文件中?1还是2?你将如何处理视图中的“调用”?例如:?另一个控制器呢?我还是不能让它工作。请看我的。