我正在使用 AngularJS 1.0.2 与 jQuery 1.8.2 并且我正在尝试让 AngularJS 将依赖项注入(inject)对象,就像它对 Controller 所做的那样。您可以在 jsFiddle 上找到一个基本示例,在那里你会发现两个 Controller (List 和 NewItem),一个对象(Item)和一个带有服务的模块(名为 服务和通信)。
我的问题是 Item:
var Item = function (name, price) {
var self = this;
self.name = name;
self.price = price;
self.pretty = function () {
return self.name + ": " + self.price;
};
};
在其中我需要使用一些外部的东西,假设我想要 pretty 方法将 price 属性格式化为货币感知字符串:
self.pretty = function () {
return self.name + ": " + $filter("currency")(self.price);
};
但这行不通,因为 $filter 没有定义。 (请注意,$filter 的用法只是一个例子,它可以是任何东西。)
并且将 var Item = function (name, price) { 修改为 var Item = function ($filter, name, price) { 也不起作用,因为创建对象的不是 AngularJS(在 Controller 的情况下),而是我。
那么,我怎样才能让 AngularJS 为我创建对象,或者让它解决我需要的依赖关系?
类似于 var item = angular.create(Item, $scope.name, $scope.price); 或 var item = new Item(angular.inject("filter") , $scope.name, $scope.price); 我想...
最佳答案
通过使用 $injector 可以要求 AngularJS 实例化您自己的对象(并向它们注入(inject)依赖项!)服务及其instantiate(Type, locals)方法。
例如,给定这样的构造函数:
var Item = function ($filter, name, price) {
var self = this;
self.name = name;
self.price = price;
self.pretty = function () {
return $filter('json')(self);
};
};
可以像这样创建一个 Item 的实例:
var item = $injector.instantiate(Item, { name: $scope.name, price: $scope.price });
请注意,instantiate 方法接受 2 个参数:
这是一个working jsFiddle (初始版本的简化版本)。
关于javascript - 让 AngularJS 将依赖项注入(inject)对象,就像它已经为 Controller 所做的那样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13395962/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调
我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这