我正在尝试围绕 angularjs 中的范围进行思考,尤其是在调用使用指令的模块上的回调时。我发现了 3 种不同的方法来完成同一件事,我正在尝试了解每种方法的优缺点。
什么时候使用&、=或者直接在parent上调用函数合适?
我更喜欢使用“=”符号进行绑定(bind),因为指令和托管指令的模块中需要的代码较少,但是 according to the documentation (理解 Transclusion 和范围)似乎使用 & 绑定(bind)到回调是首选方法,为什么?
最佳答案
好问题。应该首先从尝试分离您的关注点的 Angular 做出这些类型的决定。所以我们必须消除在父作用域上调用方法 - 指令必须了解太多有关父作用域的信息。
接下来,我们看看目的。根据定义,回调是方法。 & 在父作用域的上下文中计算表达式,而双向绑定(bind)只是一个变量名。 & 比 很多 更强大,并为指令的用户提供了更大的灵 active 。当然,他们可以这样做,就像在您的示例中一样:
<my-dir cb="callMe()"></my-dir>
但他们也可以这样做:
<my-dir cb="myVar = false"></my-dir>
我们不必传入变量的名称 - 任何 AngularJS expression .因此组件的用户可以自由地以适合他们的任何方式对您的事件使用react。太棒了!
而且,指令可以对状态变化使用react。例如,您可以检查条件:
<my-dir cb="myVar"></my-dir>
并且 myVar 可以评估任何值,并且您的指令可以在任何时候知道这种变化并做出相应的 react 。您共享的不是变量,而是表达式。在这种情况下,双向绑定(bind)会起作用,但如果指令不(也许不应该)更改该变量,为什么我们需要双向绑定(bind)?
但同样,它不必是一个变量。求值为 true 或 false 的表达式怎么样?
<my-dir cb="myVar == myOtherVar"></my-dir>
我们的指令不必关心如何父范围到达一个值 - 只关心最终是什么值。
因此我们可以将它用于父作用域以对指令作出 react ,或用于指令对父作用域作出 react ——所有这些都具有灵活的表达式。整洁。
所以,=是为了确保数据绑定(bind);它确保使用指令的范围和指令本身在某个变量上保持同步。 & 允许在父作用域的上下文中评估表达式,并允许指令或父作用域对潜在的复杂状态变化使用react。
关于javascript - 指令回调和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15188544/
请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法
假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我正在尝试使用在我的代码中是动态的Time.local来安排时间。在每个月的第一天,我传递的值是Time.local(2009,9,-1,0)。在PHP中,这会将时间设置为上个月的最后一天。在ruby中,我只是得到“ArgumentError:参数超出范围”。是我用错了方法还是什么?谢谢。 最佳答案 您应该使用DateTime类而不是Time。(您可能需要先require'date'并安装activesupportgem。)它比Time更通用,并且可以用DateTime.civil(2009,9-1,-1,0)做你想做的事。为天
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我想检查my_number是否在某个范围内,包括较高的值。在IF语句中我会简单地使用“x>100&&x但是我应该在Ruby案例中做什么(开关)?使用:casemy_numberwhenmy_number不起作用。备注:标准范围不包括my_number恰好为500的情况,并且我不想添加第二个“when”,因为我必须编写双重内容casemy_number#between100and500when100..500puts"Correct,dosomething"when500puts"Correct,dosomethingagain"end 最佳答案