如何在TypeScript中表达日期?日期不是TypeScript类型,所以我使用any或object?似乎会有一种"正确"的方式:
let myDate: any = new Date();
Run Code Online (Sandbox Code Playgroud)
尽管这是一个如此简单的问题,我在谷歌上找不到多少.
这两者之间的区别是什么?每种用例有什么用处?
该文档是不完全帮助:
forRoot创建一个包含所有指令,给定路由和路由器服务本身的模块.
forChild创建一个包含所有指令和给定路由的模块,但不包括路由器服务.
我的模糊猜测是,一个用于'main'模块,另一个用于任何导入的模块(因为它们已经可以从主模块获得服务),但我真的不能想到用例.
我根本不明白其目的mergeMap.我听过两个"解释:
merge和map" - nope的组合(或者我不能复制这个).请考虑以下代码:
var obs1 = new Rx.Observable.interval(1000);
var obs2 = new Rx.Observable.interval(1000);
//Just a merge and a map, works fine
obs1.merge(obs2).map(x=> x+'a').subscribe(
next => console.log(next)
)
//Who know what - seems to do the same thing as a plain map on 1 observable
obs1.mergeMap(val => Rx.Observable.of(val + `B`))
.subscribe(
next => console.log(next)
)
Run Code Online (Sandbox Code Playgroud)
标有"谁知道什么"的最后一篇文章只不过是一张地图obs1- 重点是什么?
什么是mergeMap真正做到?什么是有效用例的示例?(最好带一些代码)
我遇到了'不透明的标记'作为在Angular 2中实现全局常量的解决方案,例如:在Angular 2中定义全局常量
尽管阅读了文档,我似乎无法理解这一点.
使用OpaqueToken比使用字符串作为标记更可取,因为多个提供程序使用与两个不同标记相同的字符串可能导致冲突.
什么?什么是开始的Angular2令牌?所有我得到的谷歌都是JSON网络代币(他们在auth等中的角色等)的答案,据我所知,但显然没有任何关联.
什么是不透明的令牌?它是干什么用的?
PS更多关于不透明标记的文档用于提供常量.然而,他们并没有帮助我.
我真的不明白$和$$命令的用途.我认为它们只是'by.css'的替代品,但为什么是$$?
<element id = "eId"></element>
Run Code Online (Sandbox Code Playgroud)
我想,鉴于上述情况,这些将是相同的:
element(by.css('#eId'));
Run Code Online (Sandbox Code Playgroud)
和
element($('#eId'));
Run Code Online (Sandbox Code Playgroud)
但是,第一个工作,第二个不工作.为什么,这三者有什么区别?
该文档是帮助不大.它们似乎暗示"$"仅用于链接,例如element(by.css('#eId')).element($('#childId'));或"选择第一个元素,然后在第一个元素中选择第二个元素." 但是,我已经看到使用$来选择第一个元素的示例.
无论如何,这有很多文字"三者之间有什么区别(by.css,$和$$)?"
我想myConstantsFile.js用另一个字符串替换javascript文件()中指示版本号的字符串.因此,例如,我的版本号看起来像这样:"01.11.15",myConstantsFile.js 与其他常量一样写成:
.constant('productVersion', '1.11.15');
Run Code Online (Sandbox Code Playgroud)
现在,我的任务看起来像这样:
gulp.task('increment-version', function(){
gulp.src(['./somedir/myConstantsFile.js'])
.pipe(replace(/'productVersion', '(.*)'/g, '99.99.99'))
.pipe(gulp.dest('./somedir/'));
});
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用的是常量,而不是运行的增量代码,如下所示:
var numberString = '0.0.1';
var versionParts = numberString.split('.');
var vArray = {
vMajor : versionParts[0],
vMinor : versionParts[1],
vPatch : versionParts[2]
}
vArray.vPatch = parseFloat(vArray.vPatch) + 1;
var periodString = ".";
var newVersionNumberString = vArray.vMajor + periodString +
vArray.vMinor+ periodString +
vArray.vPatch;
Run Code Online (Sandbox Code Playgroud)
我需要:
我现在已经阅读了大约$ q和承诺几天了,我似乎也明白了...... 我在实践中遇到以下情况:
如果第一次呼叫失败,则返回"无数据",如果成功并表示可以进行呼叫,则进行第二次呼叫,如果不成功,则再次进行"无数据".如果第二次调用成功,则返回数据,如果不是 - "无数据".它看起来像这样(大约,我简化了一般的想法,所以不要担心这里的小错误):
return $http.get (something)
.then(function(allowedAccess){
if(allowedAccess){
return $http.get (somethingElse)
.then( function(result){return {data:result} },
function(error){return {data:"n0pe"} }
)
} else {
return {data:"n0pe"}
}
},
function(){ return {data:"n0pe"} });
Run Code Online (Sandbox Code Playgroud)有人告诉我在这里使用$ q.我真的不明白我会怎样或为什么.$ http电话已经是承诺.
如果有办法使这个更清洁,我没有看到它.刚刚完成了关于这个主题的重新阅读这篇文章.基本上,我错过了什么/有没有更好的方法来做到这一点?
编辑:也只是重新阅读链接承诺的教程 - 它根本不处理呼叫失败.基本上将此作为尽职调查发布.
编辑2:这更详细地阐述了我要问的理论,摘自第一篇文章:
这是一个简单的例子.如果你的then()回调返回另一个promise,它会变得非常强大.在这种情况下,下一个then()只会在承诺结算后执行.例如,此模式可用于串行HTTP请求(请求取决于前一个请求的结果):
这似乎是在谈论像这样的链:
asyncFn1(1)
.then(function(data){return asyncFn2(data)})
.then(function(data){return asyncFn3(data)})
Run Code Online (Sandbox Code Playgroud)
所以,如果我理解正确这一点a).不适用于我,因为我没有第三功能.B).如果我有三个函数会适用于我,因为当我在第一个$ http请求中运行if语句时,只有在if语句中我才会返回另一个promise.所以,理论上,如果我有三个异步函数来链接,我需要将我的if语句放在一个promise中吗?
使用Angular和Angular UI-Bootstrap.
我在textAngular中创建了一个下拉菜单.当您单击文本框或其中一个菜单选项以外的其他内容时,它会禁用该菜单.这是期望的行为.
但是,当使用FireFox时,打开一个下拉菜单会使用户离开菜单(即使他们使用菜单中的下拉菜单).如果它有任何帮助,看起来下拉打开后面和文本框的侧面.
在这种情况下,一张图片值1000字.左边是Chrome(想要的行为),右边是Firefox(不是想要的行为).如果嵌入的图像太小,请单击我.

这是代码.这是工具注册的显示部分.对于那些不熟悉textangular的人 - 它只是创建按钮的代码:
display: '<span class="btn-group" dropdown dropdown-append-to-body style="padding: 0px 0px 0px 0px">' +
'<button class="btn btn-default dropdown-toggle" dropdown-toggle type="button" ng-disabled="showHtml()">' +
' <span>Items Fields</span>' +
'</button>' +
'<ul class="dropdown-menu">' +
' <li ng-repeat="o in options">' +
' <a ng-click="action(o)">{{o.name}}</a>' +
' </li>' +
'</ul>' +
'</span>',
Run Code Online (Sandbox Code Playgroud)
编辑:
PS请不要被代码量吓倒.唯一相关的html位于app.js文件中,位于taRegisterTool'itemFields'下.
taRegisterTool('itemFields', {
display:
Run Code Online (Sandbox Code Playgroud) javascript twitter-bootstrap angularjs angular-ui-bootstrap textangular
我使用Pascal Precht的教程通过Angular构建了一个简单的Web组件,您可以在这里看到它.它自动神奇地编译链接中的Stackblitz,但不是本地.
我的最终目标是将生成的Web组件的代码放在本地的单独文件中.最终,我会将其上传到某处并通过单个<script>标签将其拉入,就像普通的raw-html/javascript Web Components一样.我认为问题不言自明,但如果您愿意,可以阅读以下详细信息:
要在上面的链接中总结我的代码,我有一个非常基本的组件:
import { Component } from '@angular/core';
@Component({
selector: 'hello-world',
template: `<h1>Hello world</h1>`
})
export class HelloComponent {}
Run Code Online (Sandbox Code Playgroud)
我有一个模块:
import { NgModule, Injector } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { createCustomElement } from '@angular/elements'
import { HelloComponent } from './hello.component';
@NgModule({
imports: [BrowserModule],
declarations: [HelloComponent],
entryComponents: [HelloComponent]
})
export class AppModule {
constructor(private injector: Injector) {}
ngDoBootstrap() {
const HelloElement = createCustomElement(HelloComponent, …Run Code Online (Sandbox Code Playgroud) TL; DR:
如何减少冗余(任何有效的方法)?
if (personModification.firstName != null) {person.firstName = personModification.firstName}
if (personModification.lastName != null) {person.lastName = personModification.lastName}
if (personModification.job != null) {person.job = personModification.job}
Run Code Online (Sandbox Code Playgroud)
长版:我有一个简单的问题.我有一节课Person:
class Person (val firstName: String?,
val lastName: String?,
val job: String?)
Run Code Online (Sandbox Code Playgroud)
我有一个叫做的课PersonModification:
class PersonModification(val firstName: String?,
val lastName: String?,
val job: String?)
Run Code Online (Sandbox Code Playgroud)
任务是Person用PersonModification值覆盖任何属性值,如果PersonModification属性不是null.如果你关心,这背后的业务逻辑是一个API端点,它修改Person并接受一个PersonModification参数(但可以更改所有或任何属性,因此我们不希望用空值覆盖有效的旧值).对此的解决方案看起来像这样.
if (personModification.firstName != null) {person.firstName = personModification.firstName}
if (personModification.lastName != null) {person.lastName = personModification.lastName}
if …Run Code Online (Sandbox Code Playgroud) angular ×4
angularjs ×4
javascript ×4
angular-cli ×1
date ×1
dry ×1
gulp ×1
kotlin ×1
observable ×1
optimization ×1
protractor ×1
router ×1
rxjs ×1
selenium ×1
testing ×1
textangular ×1
typescript ×1
webpack ×1