社区首页 >问答首页 >我可以在angular的每个控制器中使用一个函数吗?

我可以在angular的每个控制器中使用一个函数吗?
EN

Stack Overflow用户
提问于 2013-02-22 14:05:20
回答 5查看 145.3K关注 0票数 191

如果我有一个实用函数foo,我希望能够从ng-app声明中的任何地方调用它。有没有什么方法可以让它在我的模块设置中全局访问,或者我需要将它添加到每个控制器的作用域?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-22 14:29:38

您基本上有两个选择,要么将其定义为服务,要么将其放在根范围内。我建议你用它做一个服务,以避免污染根作用域。您可以创建一个服务,并使其在控制器中可用,如下所示:

代码语言:javascript
代码运行次数:0
复制
<!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>

如果这不适合您,您可以将其添加到根作用域,如下所示:

代码语言:javascript
代码运行次数:0
复制
<!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>

这样,您的所有模板都可以调用globalFoo(),而不必将其从控制器传递给模板。

票数 291
EN

Stack Overflow用户

发布于 2014-07-12 15:55:14

我猜你也可以把它们组合起来:

代码语言:javascript
代码运行次数:0
复制
<!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>
票数 54
EN

Stack Overflow用户

发布于 2013-12-19 23:33:24

虽然第一种方法被提倡为“类似角度”的方法,但我觉得这增加了管理费用。

考虑一下,如果我想在10个不同的控制器中使用这个myservice.foo函数。我必须指定这个'myService‘依赖项,然后在所有十个属性中指定$scope.callFoo作用域属性。这只是一个简单的重复,不知何故违反了DRY原则。

然而,如果我使用$rootScope方法,我只指定这个全局函数gobalFoo一次,它将在我未来的所有控制器中可用,无论有多少。

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15025979

复制
相关文章
详解ANGULAR2组件中的变化检测机制(对比ANGULAR1的脏检测)
组件和变化检测器 如你所知,Angular 2 应用程序是一颗组件树,而每个组件都有自己的变化检测器,这意味着应用程序也是一颗变化检测器树。顺便说一句,你可能会想。是由谁来生成变化检测器?这是个好问题,它们是由代码生成。 Angular 2 编译器为每个组件自动创建变化检测器,而且最终生成的这些代码 JavaScript VM友好代码。这也是为什么新的变化检测是快速的 (相比于 Angular 1.x 的 $digest)。基本上,每个组件可以在几毫秒内执行数万次检测。因此你的应用程序可以快速执行,而无需调
前朝楚水
2018/04/03
2.9K0
jQuery 双击事件(dblclick)时,不触发单击事件(click)
在jQuery的事件绑定中,执行双击事件(dblclick)时能触发两次单击事件(click)。即一个标签元素(如div等),如果元素同时绑定了单击事件(click)和双击事件(dblclick),那么执行单击事件(click)时,不会触发双击事件(dblclick), 执行双击事件(dblclick)时却会触发两次单击事件(click)。 先看一下点击事件的执行顺序:
飞奔去旅行
2019/06/13
5.3K0
angular4实战(4)ngrx
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/j_bleach/article/details/78161765
j_bleach
2019/07/02
1.1K0
angular4实战(4)ngrx
Angular开发实践(五):深入解析变化监测
什么是变化监测 在使用 Angular 进行开发中,我们常用到 Angular 中的绑定——模型到视图的输入绑定、视图到模型的输出绑定以及视图与模型的双向绑定。而这些绑定的值之所以能在视图与模型之间保持同步,正是得益于Angular中的变化监测。 简单来说,变化监测就是 Angular 用来监测视图与模型之间绑定的值是否发生了改变,当监测到模型中绑定的值发生改变时,则同步到视图上,反之,当监测到视图上绑定的值发生改变时,则回调对应的绑定函数。 变化监测的源头 变化监测的关键在于如何最小粒度地监测到绑定的值是
laixiangran
2018/04/11
1.8K0
JavaScript 技巧篇-js增加延迟时间解决单击双击事件冲突,双击事件触发单击事件
js 的单双击事件同时存在会有一个问题:双击事件会同时触发单击事件,两个事件存在冲突。 我们加一个延迟时间就能很好的解决这个问题。
小蓝枣
2020/09/23
6.1K0
angular-cli.json配置参数解释,以及依稀常用命令的通用关键参数解释
一. angular-cli.json常见配置 { "project": { "name": "ng-admin", //项目名称 "ejected": false // 标记该应用是否已经执行过eject命令把webpack配置释放出来 }, "apps": [ { "root": "src", // 源码根目录 "outDir": "dist", // 编译后的输出目录,默认是dist/ "assets": [ // 记录资源文件夹
喝茶去
2019/04/16
1.6K0
在触发思考
读到周洲同学的博客,看到一篇关于触发器的文章,是在用户充值时,须要在t_reCharge表中插入一条记录,同一时候更新t_card表以保证数据一致性.我们当时没想特别多,没想到触发器,就是写了多条sql语句,为了不出错后来使用了事务或存储过程,没记错的话是放在存储过程里了。她是这么实现的:
全栈程序员站长
2022/07/06
6960
Angular 实践:如何优雅地发起和处理请求
Tips: 本文实现重度依赖 ObservableInput,灵感来自同事 @Mengqi Zhang 实现的 asyncData 指令,但之前没有 ObservableInput 的装饰器,处理响应 Input 变更相对麻烦一些,所以这里使用 ObservableInput 重新实现。
灵雀云
2020/02/26
8660
Angular 实践:如何优雅地发起和处理请求
只在必要时保存服务器控件视图状态
自动视图状态管理是服务器控件的功能,该功能使服务器控件可以在往返过程上重新填充它们的属性值(您不需要编写任何代码)。但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器,所以该功能确实会对性能产生影响。您应该知道在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能。例如,如果您将服务器控件绑定到每个往返过程上的数据,则将用从数据绑定操作获得的新值替换保存的视图状态。在这种情况下,禁用视图状态可以节省处理时间。
Java架构师必看
2021/03/22
6280
关于 title 属性导致触发 mousedown 事件时连带触发 mousemove
  大家都知道,鼠标点击的整个事件的执行流程是:mousedown -> mouseup -> click ,而拖放的整个流程是:mousedown -> mousemove -> mouseup -> click
胡尐睿丶
2022/03/28
1.3K0
选择篇(039)-单击按钮时event.target是什么?
导致事件的最深嵌套元素是事件的目标。你可以通过event.stopPropagation停止冒泡
齐丶先丶森
2022/05/12
1.6K0
Map 有变动时触发特定行为实现
在平时开发过程中,通常我们会选择使用 Guava 的 Cache 类用作本地缓存。
明明如月学长
2021/11/11
5750
input输入中文时,拼音触发input事件
在上一篇文章中写到了函数防抖,在使用函数防抖来进行搜索框优化的时候会遇到一个问题,就是监听文本输入框的input事件,在拼写汉字(输入法)但汉字并未实际填充到文本框中时会触发input事件,会出现下图的效果
OECOM
2020/07/01
8.2K1
Angular学习(02)--Angular-CLI命令
官方的教程,其实已经很详细且易懂,这里再次梳理的目的在于复习和巩固相关知识点,刚开始接触学习 Angular 的还是建议以官网为主。
请叫我大苏
2019/03/19
2.6K0
Angular学习(02)--Angular-CLI命令
Android Button 单击事件
方法一:在XML文件中指定 单击事件函数 <Button             android:id="@+id/button1"             android:layout_width="120dip"             android:layout_height="wrap_content"             android:layout_alignParentLeft="true"             android:layout_below="@+id/textView1
磊哥
2018/05/08
1.7K0
点击加载更多

相似问题

JOOQ LoggerListener扩展调试日志记录

120

wordpress的调试日志不工作

32

春季调试日志记录级别不工作

17

spring-jooq,事务不工作

10

django-调试-工具栏日志不工作?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文