根据角度js docs
服务(名称,构造函数); 名称:名称 构造函数:将被实例化的可注入类(构造函数)。
Internally :
{
$get: function() {
return $injector.instantiate(constructor);
}
}
可以从角度文档得出结论,服务对待 作为构造函数和提供者传递的第二个参数创建一个实例 通过$ injector并通过$ get返回。所以每当我们注射 我们任何模块功能中的服务(控制器,指令 等)它应该返回新创建的Singleton对象 offcourse。
如果我像这些方式定义我的服务,问题就来了。
1. _app_user_content.service("MyService" , function(){
this.Message = "Greetings!";
}); //returns object when injected.
2. _app_user_content.service("MyService" , function(){
this.Message = "Greetings!";
return "123"
}); // returns object when injected.
3. _app_user_content.service("MyService" , function(){
this.Message = "Greetings!";
return function(){}
}); //returns function(){} when injected. Doesnot return object
为什么第三种情况会返回一个函数?
答案 0 :(得分:2)
这是一个JavaScript的东西,不仅仅是一个有角色的东西。
角度service
的作用基本上是通过执行new SomeObject()
将SomeObject
作为构造函数来使用你的函数,function potato() {this.yummy = true; return function() {};}
function tomato() {this.yummy = true;}
console.log(new potato());
console.log(new tomato());
是你在第二个参数中定义的函数(重要的是要注意在JavaScript函数中)是对象)。
如果你的函数没有返回任何值或原始值,构造函数将忽略你的返回值,而是返回你在该函数的作用域(this)上设置的任何内容。但是,如果返回一个对象,则构造函数似乎将返回该对象。 (谢谢@ajaykumar)
在浏览器控制台中试试......
function () {}
你应该看到马铃薯归来{yummy: true}
。
您应该看到番茄返回new SomeObject()
。
对于像这样的构造函数,我建议不要返回任何内容。
但是,如果你使用角度factory方法,你会发现return SomeObject()
角度不会new
android.support.v7.preference.DialogPreference;
,在这种情况下你想要返回一个DialogPreference.
具有您要在服务中公开的任何函数/参数的对象。
有关JavaScript import android.content.Context;
import android.support.v7.preference.DialogPreference;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ToggleButton;
public class TogglePreferenceTest extends DialogPreference {
public TogglePreferenceTest(Context context) {
super(context);
}
public TogglePreferenceTest(Context context, AttributeSet attrs) {
super(context, attrs);
}
public TogglePreferenceTest(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public View getView(View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = new LinearLayout(getContext());
((LinearLayout) convertView)
.setOrientation(LinearLayout.HORIZONTAL);
TextView txtInfo = new TextView(getContext());
txtInfo.setText("Test");
((LinearLayout) convertView).addView(txtInfo,
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT, 1));
ToggleButton btn = new ToggleButton(getContext());
((LinearLayout) convertView).addView(btn);
}
return convertView;
}
}
关键字,原型和构造函数here的更多信息。