如何从AngularJS中的另一个文件调用控制器?
假设我有以下文件: JS1文件:如何从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
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?你将如何处理视图中的“调用”?例如:?另一个控制器呢?我还是不能让它工作。请看我的。