在最新版本的Angular 6中,使用providedIn服务元数据中的属性在模块中注册服务:
@Injectable({
providedIn: 'root',
})
export class HeroService {}
Run Code Online (Sandbox Code Playgroud)
但是文档仍然指的是providers在模块元数据中注册模块数组中的服务,就像我们在Angular 5中一样:
@NgModule({
providers: [HeroService],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
那么应该使用哪种方法使注入器知道它应该注入的服务&模块提供者的数组方法是否会被弃用?
角度依赖注入允许您使用令牌而不是服务类注入字符串,函数或对象.
我在我的模块中声明它是这样的:
providers: [{ provide: MyValueToken, useValue: 'my title value'}]
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
constructor(@Inject(MyValueToken) my_value: string) {
this.title = my_value;
}
Run Code Online (Sandbox Code Playgroud)
但是,如何更新组件中的值并让其他组件每次都获得新值?换句话说,我想模拟使用类似a BehaviorSubject来发射和接收值的功能.
如果这不可能,那么如果它们仅提供静态数据,那么这些注入令牌值的用途是什么,而我可以简单地在我的组件中声明静态值并直接使用它.
typescript angular-services angular-decorator angular angular-di
我已经能够在每天的特定时间开始服务,但我想做同样的事情停止但我不知道如何.
这是我用来使用AlarmManager启动服务的代码.
注意:我是Android dev的新手,因此提供完整的评论代码将受到高度赞赏.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
PendingIntent pi = PendingIntent.getService(getApplicationContext(), 0,
new Intent(getApplicationContext(), Service.class), PendingIntent.FLAG_NO_CREATE);
AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pi);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用HTML5"required"属性验证简单的角度4表单的输入,但验证不起作用.表单在屏幕上正确加载,一切正常,但表单验证除外.
我正在使用"Materialise-css"布局进行布局.
的index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Projeto teste</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<header>
<!--Navbar-->
<nav>
<div class="nav-wrapper">
<form>
<div class="input-field">
<input id="search" type="search" required>
<label class="label-icon" for="search"><i class="material-icons">search</i></label>
<i class="material-icons">close</i>
</div>
</form>
</div>
</nav>
<!--SideNav-->
<ul id="slide-out" class="side-nav">
<li>
<div class="userView">
<div class="background">
<img src="images/office.jpg">
</div>
<a href="#!user"><img class="circle" src="images/yuna.jpg"></a>
<a href="#!name"><span class="white-text name">John Doe</span></a>
<a href="#!email"><span class="white-text email">jdandturk@gmail.com</span></a>
</div>
</li>
<li><a href="#!"><i class="material-icons">cloud</i>First Link With Icon</a></li>
<li><a href="#!">Second …Run Code Online (Sandbox Code Playgroud) 我真的被卡住了.我在我的主要活动中使用选项卡进行了四次滑动视图,但我想要的是当用户打开应用程序时,它会自动显示第二个选项卡而不是第一个选项卡.
这是我的MainActivity.java
public class MainActivity extends FragmentActivity implements
ActionBar.TabListener {
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "First Tab", "Second Tab", "Third Tab", "Fourth Tab" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Initilization
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
/**
* on swiping the viewpager make respective …Run Code Online (Sandbox Code Playgroud) 我正在使用模型驱动模板。如果未选中复选框,我想禁用输入。但它不适用于 formControlName。我尝试了三种方式。给这里
1.disabled="!filterForm.value.customer_limit"
2.[disabled]="!filterForm.value.customer_limit"
3.[readonly]="!filterForm.value.customer_limit"
Run Code Online (Sandbox Code Playgroud)
这是我的 HTML 代码:
<md-checkbox [checked]="filterForm.value.customer_limit" formControlName="customer_limit">
<md-input-container class="full-width">
<input mdInput
formControlName="customer_limit_input"
[disabled]="!filterForm.value.customer_limit"
placeholder="Limit to customers">
</md-input-container>
</md-checkbox>
Run Code Online (Sandbox Code Playgroud)
有任何想法请帮助我。谢谢
我有一个带有 md-require-match=true 和验证消息的自动完成控件(Angular Material version 1.1.2)
<md-autocomplete required
md-no-cache="true"
md-select-on-match = "true"
md-selected-item="vm.selectedItem"
md-search-text="vm.searchText"
md-items="country in vm.querySearch(vm.searchText)"
md-item-text="country.nm"
md-min-length="2"
md-selected-item-change="vm.updateOrgCountry(country.cd)"
md-require-match = "true"
md-input-name="countryField"
md-match-case-insensitive = "true"
md-floating-label="Country">
<md-item-template>
<span md-highlight-text="vm.searchText" md-highlight-flags="^i">{{country.nm}}</span>
</md-item-template>
<md-not-found>
No Countries matching "{{vm.searchText}}" were found.
</md-not-found>
<div ng-messages="orgForm.countryField.$error">
<div ng-message="required"></div>
<div ng-message="md-require-match">Country not found.</div>
</div>
</md-autocomplete>
Run Code Online (Sandbox Code Playgroud)
当我第一次进入控件并开始输入时,一切都按预期工作。如果我没有从列表中选择一个项目,然后离开控件,我会收到“未找到国家/地区”错误消息。
但是,如果我返回控件并再次开始输入,则每次按下按键后都会收到“未找到国家/地区”错误消息,直到我从列表中选择了某些内容。我不希望出现这种行为,因为用户在输入数据时应该会看到错误。
有没有办法将自动完成控件配置为仅在控件失去焦点时验证匹配?
我有一个左侧边栏,位置固定.我想要实现的是,当我滚动大约50或60像素时,左侧边栏的位置应该更改为固定.
左sidebar.component.ts
import { Component } from '@angular/core';
@Component({
moduleId: module.id,
selector: 'left-sidebar',
templateUrl: 'left-sidebar.html',
styleUrls: ['left-sidebar.scss']
})
export class LeftSideBarComponent {
}
Run Code Online (Sandbox Code Playgroud)
左sidebar.html
<div class="col-sm-2 left-nav">
</div>
Run Code Online (Sandbox Code Playgroud)
CSS
.left-nav {
position: absolute;
background: #424242;
height: 100%;
overflow: auto;
padding: 0;
z-index: 1;
}
Run Code Online (Sandbox Code Playgroud)
如何在滚动条上将左侧边栏的位置从绝对位置更改为固定位置?
angular ×5
android ×2
typescript ×2
angular-cli ×1
angular-di ×1
angular6 ×1
angularjs ×1
css ×1
html5 ×1
javascript ×1
swipeview ×1
tabs ×1
validation ×1