Angular 的控制器方法如何使 $scope 可用于我的函数参数

2024-01-03

我正在寻找伪代码答案或概念答案。


经过多年的编程,我从未创建过接收函数参数的类方法,以便该方法的调用者自动访问“不可见”属性。

如果我尝试在我的范围之外访问 $scopemy_app.controller(...)方法,我收到一个错误,所以我知道它不是全局的;如果我尝试从以下位置访问它my_app.$scope or angular.$scope我变得不确定。

那么我的函数参数如何访问它:

    my_app.controller('my_controller' , function( $scope , ... ) { ... }

更新(正如我正在学习的那样):

  // javascript
  var my_class =   function( argument_A )                 
                       { this.some_prop = argument_A ;        

                         this.some_method = function( argument_B ) 
                           { console.log( argument_B ) ; // function(boo)
                           } ;
                       } ;

  var my_instance = new my_class( "my_string" ) ;

  var my_function_argument = function( boo ){ } ;
  my_instance.some_method( my_function_argument ) ; 

函数是一等公民

In JavaScript and other modern languages (Scala, Haskell, LISP, etc.), functions are treated as first-class citizens. Specifically, this means the language supports passing functions as arguments to other functions, returning them as the values from other functions, and assigning them to variables or storing them in data structures. Some programming language theorists require support for anonymous functions (function literals) as well. In languages with first-class functions, the names of functions do not have any special status; they are treated like ordinary variables with a function type.1 https://en.wikipedia.org/wiki/First-class_function

上面的例子可以重构为:

var myController = function ($scope, ... ) {
     console.log($scope);
     $scope.message = "Hello world"
};

my_app.controller('my_controller' , myController );

在这种情况下.controller方法存储myControllerAngularJS 缓存中的对象$controllerProvider服务。 IE。cache["my_controller"] = myController;

后来当$compile服务遇到需要控制器的指令:

<div ng-controller="my_controller">
    {{message}}
</div>

The $compile服务创建一个新范围,检索myController函数从$controller服务缓存,并使用新作用域作为函数的第一个参数来调用该函数。

The $compile服务还创造了$watch监听功能,跟踪$scope.message多变的。在每个消化周期,如果$scope.message发生变化时,DOM 会相应更新。

在问题的示例中:

//These are function invocations, the variable must be defined

console.log( boo )              ; //    ERROR: boo is not defined
my_instance.some_method( boo )  ; //    ERROR: boo is not defined

最后一种形式使用匿名函数文字(或函数表达式)。匿名函数是作为参数传递给名为的方法的对象.some_method.

//The anonymous function is an object passed as an argument
//boo is a parameter to be supplied when the function is invoked

my_instance.some_method( function( boo ) { } ) ; // NO ERROR

有关函数文字的更多信息,请参阅MDN JavaScript 参考 -- 函数表达式 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function*.


依赖注入和按名称连接参数

通常在 JavaScript 中,函数参数是相连的按位置。在AngularJS框架中,函数参数被注入by name。这是怎么做到的?

来自文档:

推理

在 JavaScript 中调用toString()on 函数返回函数定义。然后可以解析定义并提取函数参数。

-- AngularJS $injector 服务 API 参考 -- 推理 https://docs.angularjs.org/api/auto/service/%24injector#inference

所以在例子中:

my_app.controller('my_controller' , function( $scope , ... ) { ... }

The $injector服务做了一个toString()控制器构造函数并对其进行解析。该服务检测到$scope是函数的第一个参数,并使用该知识来正确调用该函数。

你可以看到fn.toString()正在使用在源代码中 https://github.com/angular/angular.js/blob/master/src/auto/injector.js#L72.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 的控制器方法如何使 $scope 可用于我的函数参数 的相关文章

  • 使用按钮在 aspx.cs 上调用 JavaScript 函数(以 aspx 形式)

    我有这个aspx div div
  • 如何在 guildMemberAdd 中使用awaitReactions

    当用户连接到我的服务器时 我向他们发送消息 并且我想通过单击反应来继续授权 我怎样才能创建这个 我正在使用以下代码 robot on guildMemberAdd gMembAdd gt gMembAdd send Hi gMembAdd
  • 找不到 firebase-messaging.js laravel

    大家好 我正在使用 firebase 制作一个用于推送通知的应用程序 这是我在 firebase 中的第一个项目 我遇到的问题是当我运行项目并单击它给我的登录按钮时的连接 已授予通知权限 但在此之后它返回一个错误 如下所示 获取脚本时收到错
  • JavaScript 函数参数和范围

    我用下面列出的代码做了一些测试 function foo x alert y var y I am defined outside foo definition foo 上面的代码给了我一个警告 我是在 foo 定义之外定义的 然后另一个测
  • 自定义过滤器在 Angular Hybrid 应用程序中不起作用

    我正在尝试将 AngularJS 1 6 应用程序与 Angular 5 一起转换为混合应用程序 我定义了以下简单过滤器 function use strict var filterId colorPicker angular module
  • Internet Explorer 的数组indexOf 实现

    有很多关于如何将 indexOf 实现放入数组原型中以便它可以在 Internet Explorer 下工作的解决方案 但是我偶然发现了一个问题 到目前为止我所看到的任何地方似乎都没有解决这个问题 使用非常一致的MDC 的实施 https
  • 如果只有一个元素发生变化,为什么 AngularJs 会更新数组/哈希映射的所有元素?

    我有一个简单的哈希图和一个以文本形式显示状态的简单方法 但是当我仅更新 1 个用户状态时 所有这些状态都会更新 为所有用户调用函数 有没有一种方法可以只更新一个元素而不是全部 示例代码在这里 只需看看当您单击 更改状态 按钮时控制台中会发生
  • 如何防止缓慢脚本警告并强制浏览器继续运行脚本直到完成?

    更新 2013 年 7 月 5 日 自从我最初问这个问题以来 我学到了很多东西 在下面的一条评论中 有人建议我重新处理该任务 并找到一种方法来解决它 而不会有阻塞 UI 的风险 我说不可能 函数必须按原样运行 我实际上不记得我试图用这个函数
  • 句柄类和值类的区别

    我有一些 C 背景 想使用 Matlab 中的类 句柄和值类有什么区别 我知道如果我想定义一个带有重载运算符 例如 和 的矩阵类 我会使用值类 然而 有时 当我选择一个手柄类时 事情似乎只对我有用 MathWorks 提供了一些有关其用途的
  • 与玻璃钢战斗

    我读过有关 FRP 的内容 非常兴奋 它看起来很棒 因此您可以编写更多高级代码 并且一切都更加可组合 等等 然后我尝试用数百个 sloc 从纯 js 到 Bacon 重写我自己的小游戏 我发现 我实际上不是编写高级纯逻辑代码 而是击败了 B
  • 更改导航栏悬停时 div 的背景图像

    我正在开发一个项目 我对 Javascript 很陌生 所以我想知道是否有 Jquery 代码或只是一个关于如何使背景图像在导航菜单悬停时更改的过程 例如将鼠标悬停在链接一上会将 div 的背景图像更改为图像 1 将鼠标悬停在链接二上会将
  • 调整发散堆积条形图以使用通用更新模式

    我一直在使用可用的堆积条形图示例here https bl ocks org mbostock b5935342c6d21928111928401e2c8608使用以下代码 var data month Q1 2016 apples 384
  • JavaScript 将 NULL 转换为 0

    我正在使用 jQuery 来获取元素的高度 但如果该元素不存在 以下代码将返回 NULL height menu li active ul height returns integer or null 这是一种跨浏览器安全的方法 可以使用以
  • 如何在 ES6 类中使用静态变量?

    我正在尝试在 es6 中使用静态变量 我想声明一个静态变量count in Animal类并增加它 但是 我无法通过声明静态变量static count 0 所以我尝试了另一种方法 class Animal constructor this
  • 动态多个延迟 jQuery Ajax 调用

    使用 jQuery 的延迟模式http api jquery com jQuery when http api jquery com jQuery when 我正在尝试进行多个 jsonp ajax 调用并等待结果 然后再进行下一步 我可以
  • ajax - 检查用户名是否存在+如果存在则返回消息

    我试图检查用户想要的用户名是否已被使用 而无需发送表单 基本上是用户名字段的模糊 我遇到了一些麻烦 有几个问题 我有我的输入字段加上js
  • 谷歌地图通过骨干javascript返回div标签但不显示

    我已经开始使用地理定位 我可以获得坐标等 我想在地图中显示它 但是当我将地图返回到 div 时 什么也没有显示 现在我查看了 div 地图正在返回 但只是不可见 这是有问题的 div 请注意 这似乎只是一个小地图的链接 a style di
  • CasperJS:如何单击所有选定的按钮?

    我正在尝试使用 CasperJS 作为网络抓取工具 并且有一个带有按钮的页面 单击该按钮将加载数据 因此 我想先单击所有这些按钮 然后等待 然后再实际进行查询以获取所有必要的数据 问题是对于 Casper casper thenClick
  • jQuery 存储类型未定义

    我用了一个jQuery 存储 https ui5 sap com api jQuery sap storage存储数据 oStore jQuery sap storage jQuery sap storage Type local oSto
  • angular-cli:Karma-Webpack 因“没有此类文件或目录”而失败

    我从Tour of Heroes使用标准 Angular systemjs 现在我正在使用angular client它在开发 生产模式下运行顺利 但我无法测试任何东西ng test 以下内容会被吐出 不仅适用于test ts但也为了pol

随机推荐

  • 更改 PHP.ini 位置文件?

    我在 OSX 上使用 apache2 默认情况下php ini位置是 private etc php ini 我需要把它改成这样 Library FileMaker Server Web Publishing publishing engi
  • Delphi 2010-IDE 不断停止在 CPU 调试窗口

    我在 D2010 IDE 中不断出现 CPU 调试窗口 我注意到这出现在一些断点上 而其他一些断点则不会导致这种效果 无法解释这种情况到底何时发生或哪些断点导致这种情况 但似乎当调试器无法到达代码上的断点时 它会停止在方法的开始地址上 并且
  • 在 jar 中包含属性/配置文件是一种不好的做法吗?

    例如 MyApp 是一个 Web 应用程序 其中包含一个属性文件 server properties 该文件描述应用程序的配置数据 例如服务器名称 在开发阶段 server properties 位于其自己的 IDE 项目文件夹中 它的逻辑
  • 当终端关闭时终止 sudo python 脚本

    如何判断运行 python 脚本的终端是否已关闭 如果用户关闭终端 我想安全地结束我的 python 脚本 我可以使用处理程序捕获 SIGHUP 但当脚本作为 sudo 运行时则不行 当我使用 sudo 启动脚本并关闭终端时 python
  • 模拟内存不足警告不起作用

    我有一个UIWebView in a UIViewController 我正在尝试将此视图控制器推送到现有的UINavigationController 它有另一个视图控制器 它也有一个UIWebView在里面 推动第一个视图控制器后 我尝
  • 单击时切换 CSS3 动画

    在没有 JavaScript 的情况下 在点击时改变 CSS3 动画方向的最佳方法是什么 我最近一直在探索复选框黑客 并试图找到一种方法 只使用一组关键帧 而不是两组 一个前进 一个返回 这可能吗 或者有没有办法用一套来做到这一点 例如我有
  • 如何删除mysql数据库中的重复记录?

    使用rails或mysql查询删除mysql数据库中重复记录的最佳方法是什么 您可以通过以下方式将不同的记录复制到新表中 select distinct into NewTable from MyTable
  • 如何使用 Gradle 运行多个命名测试?

    我知道怎么说 gradle test tests mypackage MyTest 但如何指定多个呢 gradle test tests mypackage MyTest mypackage model ModelTest BasicTes
  • 了解 Qt 中的表单布局机制

    Qt具有灵活且强大的布局机制来处理桌面应用程序窗口的视图 但它是如此灵活 以至于当出现问题并需要微调时 它几乎无法被理解 而且如此强大 以至于它可以击败任何试图压倒 Qt 关于表单外观的观点的人 那么 谁能解释一下 或者提供一下Qt的定位机
  • PDO 因记录过多、缓冲查询而失败

    这个脚本昨天运行良好 但是今天 由于我最初选择的表中现在有大约 150 000 条记录 所以它失败了 说我正在从 null 获取 据我所知 这是因为我的记录太多了 因此 我最终通过向初始查询 1000 添加限制和这一行来纠正它 MysqlC
  • Bash 中的文件名未正确打印,带有下划线“_”[重复]

    这个问题在这里已经有答案了 我正在用这个 DATE FOLDER date b d a G FILENAME HOME date1 tar gz echo BACKUP DESTINATION DATE FOLDER FOLDERNAME
  • Python 继承:何时以及为何使用 __init__

    我是一个Python新手 试图理解继承方法背后的哲学 逻辑 问题最终涉及为什么以及何时必须使用 init 子类中的方法 例子 看来从超类继承的子类不需要有自己的构造函数 init 方法 下面 狗继承了哺乳动物的属性 名字 年龄 和方法 发出
  • 产品密钥的正则表达式

    我正在尝试做一个正则表达式来显示所有具有该值的产品密钥 这是我创建的正则表达式 A Z0 9 5 A Z0 9 5 A Z0 9 5 A Z0 9 5 A Z0 9 5 由于某种原因它不起作用 您打算使用哪种正则表达式工具 grep egr
  • 无法登录活动管理。有什么办法可以创建管理员用户吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当我尝试使用默认管理员用户登录时 我收到 无效的电子邮件或密码 有没有办法用代码创建用户并尝试以这种方式登录 我可以登录我的实时网站 但不
  • 像 Perl 一样在 JavaScript 正则表达式中嵌入注释

    有没有办法在 JavaScript 正则表达式中嵌入注释 例如你可以用 Perl 做 https stackoverflow com questions 632795 how do you comment a perl regular ex
  • WCF - 序列化继承类型

    我有这些课程 DataContract public class ErrorBase DataContract public class FileMissingError ErrorBase DataContract public clas
  • 如何找到上次访问数据库的时间?

    在 SQL Server 2005 中 您能否轻松确定某人上次查询数据库的时间 扩展詹姆斯 艾伦的答案 SELECT d name last user seek MAX last user seek last user scan MAX l
  • 在 C++ 中使用 RK-4 求解洛伦兹方程

    我用 C 编写了使用 RK 4 方法求解洛伦兹方程的代码 我必须绘制吸引子图 并且在使用 RK 4 方法求解 3 一阶耦合微分方程时遇到一些困难 这是我的代码 Solving 3 coupled first order differenti
  • 系统在哪里存储图标位置?

    任何文件夹上的 图标视图 和 文件夹视图 实际上都是 SysListView 如果取消选中 自动排列图标 您可以在图标周围移动 下次打开文件夹时 所有图标都将位于与上次相同的位置 我的问题是 系统在哪里存储图标的 x 和 y 位置 设置为桌
  • Angular 的控制器方法如何使 $scope 可用于我的函数参数

    我正在寻找伪代码答案或概念答案 经过多年的编程 我从未创建过接收函数参数的类方法 以便该方法的调用者自动访问 不可见 属性 如果我尝试在我的范围之外访问 scopemy app controller 方法 我收到一个错误 所以我知道它不是全