Angularjs 我是否可以在每个控制器中使用angular?
如果我有一个实用函数Angularjs 我是否可以在每个控制器中使用angular?,angularjs,function,global,Angularjs,Function,Global,如果我有一个实用函数foo,我希望能够从ng应用程序声明中的任何位置调用该函数。是否有某种方法可以使其在模块设置中全局可访问,或者是否需要将其添加到每个控制器的作用域中 基本上有两种选择,要么将其定义为服务,要么将其放在根范围内。我建议您使用它来提供服务,以避免污染根范围。创建服务并使其在控制器中可用,如下所示: <!doctype html> <html ng-app="myApp"> <head> <script src="http://co
foo
,我希望能够从ng应用程序
声明中的任何位置调用该函数。是否有某种方法可以使其在模块设置中全局可访问,或者是否需要将其添加到每个控制器的作用域中 基本上有两种选择,要么将其定义为服务,要么将其放在根范围内。我建议您使用它来提供服务,以避免污染根范围。创建服务并使其在控制器中可用,如下所示:
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', []);
myApp.factory('myService', function() {
return {
foo: function() {
alert("I'm foo!");
}
};
});
myApp.controller('MainCtrl', ['$scope', 'myService', function($scope, myService) {
$scope.callFoo = function() {
myService.foo();
}
}]);
</script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="callFoo()">Call foo</button>
</body>
</html>
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', []);
myApp.run(function($rootScope) {
$rootScope.globalFoo = function() {
alert("I'm global foo!");
};
});
myApp.controller('MainCtrl', ['$scope', function($scope){
}]);
</script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="globalFoo()">Call global foo</button>
</body>
</html>
var myApp=angular.module('myApp',[]);
myApp.factory('myService',function()){
返回{
foo:function(){
警惕(“我是福!”);
}
};
});
myApp.controller('MainCtrl',['$scope','myService',function($scope,myService){
$scope.callFoo=函数(){
myService.foo();
}
}]);
打电话给福
如果这不是您的选项,您可以将其添加到根范围,如下所示:
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', []);
myApp.factory('myService', function() {
return {
foo: function() {
alert("I'm foo!");
}
};
});
myApp.controller('MainCtrl', ['$scope', 'myService', function($scope, myService) {
$scope.callFoo = function() {
myService.foo();
}
}]);
</script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="callFoo()">Call foo</button>
</body>
</html>
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', []);
myApp.run(function($rootScope) {
$rootScope.globalFoo = function() {
alert("I'm global foo!");
};
});
myApp.controller('MainCtrl', ['$scope', function($scope){
}]);
</script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="globalFoo()">Call global foo</button>
</body>
</html>
var myApp=angular.module('myApp',[]);
myApp.run(函数($rootScope){
$rootScope.globalFoo=函数(){
警惕(“我是全球食物!”);
};
});
myApp.controller('MainCtrl',['$scope',函数($scope){
}]);
呼叫全球foo
这样,您的所有模板都可以调用
globalFoo()
,而无需将其从控制器传递到模板。尽管第一种方法被提倡为“类似角度的”方法,但我觉得这会增加开销
考虑一下我是否想在10个不同的控制器中使用myservice.foo函数。我必须指定这个“myService”依赖项,然后在所有十个属性中指定$scope.callFoo scope属性。这只是一种重复,而且在某种程度上违反了干燥原则
然而,如果我使用$rootScope方法,我只指定一次这个全局函数gobalFoo,它将在我未来的所有控制器中可用,不管有多少个控制器 我想你也可以把它们结合起来:
<!doctype html>
<html ng-app="myApp">
<head>
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.angularjs.org/1.1.2/angular.min.js"></script>
<script type="text/javascript">
var myApp = angular.module('myApp', []);
myApp.factory('myService', function() {
return {
foo: function() {
alert("I'm foo!");
}
};
});
myApp.run(function($rootScope, myService) {
$rootScope.appData = myService;
});
myApp.controller('MainCtrl', ['$scope', function($scope){
}]);
</script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="appData.foo()">Call foo</button>
</body>
</html>
var myApp=angular.module('myApp',[]);
myApp.factory('myService',function()){
返回{
foo:function(){
警惕(“我是福!”);
}
};
});
运行(函数($rootScope,myService){
$rootScope.appData=myService;
});
myApp.controller('MainCtrl',['$scope',函数($scope){
}]);
打电话给福
AngularJs拥有“服务”和“工厂”,仅用于解决像您这样的问题。它们用于在控制器、指令、其他服务或任何其他AngularJs组件之间具有全局性。您可以定义函数、存储数据、,在服务中创建calculate函数或任何您想要的函数,并在AngularJs组件中作为全局使用它们
angular.module('MyModule', [...])
.service('MyService', ['$http', function($http){
return {
users: [...],
getUserFriends: function(userId){
return $http({
method: 'GET',
url: '/api/user/friends/' + userId
});
}
....
}
}])
如果你需要更多
我比Angular更新了一点,但我发现做一件有用的事(而且非常简单)就是我先创建一个全局脚本,然后加载到我的页面上,然后再创建一个本地脚本,其中包含所有页面都需要访问的全局变量。在该脚本中,我创建了一个名为“globalFunctions”的对象,并添加了作为属性全局访问所需的函数。e、 g.
globalFunctions.foo=myFunc()代码>。然后,在每个本地脚本中,我编写了$scope.globalFunctions=globalFunctions
并且我可以立即访问我在全局脚本中添加到globalFunctions对象的任何函数
这是一个解决方法,我不确定它是否对您有帮助,但它确实对我有帮助,因为我有很多功能,将所有功能添加到每个页面是一件痛苦的事情。控制器“记录”他们在哪里获得全球服务呼叫可能有一些价值。如果您将一个控制器猛拉到另一个应用程序中,则不太清楚全局函数来自何处。我听说你承认你的论点。如果你需要从视图调用它,它只需要放在范围内。在控制器中,您可以直接从服务调用它。这是一个注释而不是一个应答$rootScope变量在页面刷新时始终为null,在这种情况下,您将无法获得该函数。这就是为什么注入服务并在应用程序中使用其引用很好的原因。我不是100%确定这一点,但是您也可以在您的模块上这样定义它:module.value('myFunc',function(a){return a;})
然后按名称将其注入控制器中。(如果想要避免提供服务)这意味着我必须手动将其添加到每个控制器中$rootScope是实现我两年前想做的事情的途径=)好的。:)我只是比普通控制器更经常地使用具有隔离作用域的指令,而且我必须注入所有内容。我喜欢它提供的模块化代码风格。此外,您不必以任何方式干扰父范围,也不必搜索太多范围变量的来源。:)在第一个解决方案中,如果有大量的foo()
函数,该怎么办?为它们中的每一个制作一个$scope.callFoo()
包装器太麻烦了。如何将库的所有函数“附加”到作用域中,以便在模板中使用?我有一个大的单位转换库,我希望它可以在我的模板上使用。我的问题也是。我尝试过这个方法,效果很好:你可以通过说$scope.callFoo=myService.foo来“附加”它代码>代替在每个您想使用的地方创建新包装。感谢您的帮助,我想知道如何在我的应用程序中提供更改语言功能,$rootScope完成了这项工作。我希望将翻译模块与应用程序分开,这样我就可以将其插入其他应用程序。我建议使用角度值,而不是工厂值