大多数源将纯函数定义为具有以下两个属性:
这是与我有关的第一个条件。在大多数情况下,很容易判断。考虑以下JavaScript函数(如本文所示)
纯:
const add = (x, y) => x + y;
add(2, 4); // 6
Run Code Online (Sandbox Code Playgroud)
不纯:
let x = 2;
const add = (y) => {
return x += y;
};
add(4); // x === 6 (the first time)
add(4); // x === 10 (the second time)
Run Code Online (Sandbox Code Playgroud)
不难看出,第二个函数将为后续调用提供不同的输出,从而违反了第一个条件。因此,这是不纯的。
这部分我明白了。
现在,对于我的问题,考虑以下函数,该函数将给定的美元金额转换为欧元:
(编辑- const在第一行中使用。let较早地使用。)
const exchangeRate = fetchFromDatabase(); // evaluates to say 0.9 for today;
const dollarToEuro = (x) => {
return …Run Code Online (Sandbox Code Playgroud) 我有一个角度CLI项目设置.我做了一个使用角度材料组件的表格,比如<md-card>.
我刚刚开始编写我的第一个Karma/Jasmine单元测试,遵循angular docs中的步骤.
这是我的组件模板:
<md-card [ngClass]="'dialog-card'">
<md-card-title [ngClass]="'dialog-title'">
{{title}}
</md-card-title>
<md-card-content>
<form (ngSubmit)="login()" #loginForm="ngForm">
<md-input-container class="md-block">
<input md-input [(ngModel)]="user.email"
name="userEmail" type="email" placeholder="Email"
ngControl="userEmail"
required>
</md-input-container>
<br>
<md-input-container class="md-block">
<input md-input [(ngModel)]="user.password"
name="userPassword" type="password" placeholder="Password"
ngControl="userPassword"
required>
</md-input-container>
<br>
<tm-message msgText="Wrong username or password" *ngIf="showError"></tm-message>
<br>
<button md-button type="submit" [disabled]="!loginForm.form.valid">Login</button>
<p (click)="openForgotPasswordModal()">Forgot Password?</p>
</form>
</md-card-content>
Run Code Online (Sandbox Code Playgroud)
这是我的业力规范:
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { …Run Code Online (Sandbox Code Playgroud) javascript karma-jasmine angular-material angular-cli angular
我使用角度CLI进行Angular2项目设置.我正在尝试测试表单组件.它有两个字段:电子邮件和密码.两者都是required.有一个类型的登录按钮submit.只有在用户在两个字段中都提供了有效输入后才能启用它.
<form (ngSubmit)="login()" #loginForm="ngForm">
<md-input-container class="md-block">
<input md-input [(ngModel)]="user.email" class="userEmail"
name="userEmail" type="email" placeholder="Email"
ngControl="userEmail"
required>
</md-input-container>
<br>
<md-input-container class="md-block">
<input md-input [(ngModel)]="user.password" class="userPassword"
name="userPassword" type="password" placeholder="Password"
ngControl="userPassword"
required>
</md-input-container>
<br>
<!--the button is enabled only after all form fields are valid-->
<button color="primary" md-button
type="submit" class='loginButton'
[disabled]="!loginForm.form.valid">
Login
</button>
Run Code Online (Sandbox Code Playgroud)
现在,我想用业力来测试按钮.我浏览了文档,并通过在测试和验证过程中提供随机输入来测试输入:
//imports...
describe('LoginComponent (inline template)', () => {
let comp: LoginComponent;
let fixture: ComponentFixture<TmLoginComponent>;
let userEmail: HTMLInputElement;
let userPassword: HTMLInputElement;
let loginBtn: HTMLElement;
let title: HTMLElement;
beforeEach(() …Run Code Online (Sandbox Code Playgroud) 我有一些代码假设 OS X 的垂直滚动条宽度为 15px,并相应地进行一些布局。
这适用于 Mac。然而,在 Macbook 上,Chrome 的滚动条似乎并没有占用任何额外的空间。它显示为页面内容上的覆盖层。这会导致布局有点扭曲。
有什么方法可以检测滚动条是否为 Apple 台式机/笔记本电脑上的 Chrome 保留了空间?
我知道在角度2中有基本的双向绑定,如文档中所示.
我有一个persons 数组,我用它来构建一个HTML列表:
现在,当我点击一个人的行时,我可以使用双向绑定来编辑它:
<form>
<label>Name: </label>
<input [(ngModel)]="selectedPerson.name" name="name"/>
<label>Description: </label>
<input [(ngModel)]="selectedPerson.job" name="job"/>
</form>
Run Code Online (Sandbox Code Playgroud)
现在,我想要的是双向绑定列表本身:(列表与行编辑器在不同的视图中)
<div class='row' *ngFor="let person of model">
<div class='col'>{{person.name}}</div>
<div class='col'>{{person.job}}</div>
</div>
Run Code Online (Sandbox Code Playgroud)
目前,我正在使用*ngFor列出所有人.如果我model是两个人的阵列,我得到两排.有些情况下,model可能会改变为有3或4人.有什么方法可以进行角度检测并相应地添加行?[(ngModel)]这似乎不适用.
基本上,我希望我的列表视图更新,而无需刷新页面.如何model使用于ngFor听取变化?
我是 angular2 (2.4.2) 的新手,我正在尝试像这样动态地创建多个路由器出口:
示例代码-
import { Component } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'my-app',
template: `<h1>Hello {{name}}</h1>
<div *ngFor="let number of numbers">{{number}}</div>
<div *ngFor="let number of numbers">
<router-outlet name="{{number}}"></router-outlet>
</div>
<router-outlet></router-outlet>
`,
})
export class AppComponent {
name = 'Angular';
numbers:any;
constructor(){
this.numbers = [0,1,2,3,4];
}
}
Run Code Online (Sandbox Code Playgroud)
但是我在以下内容中遇到了路由器插座的这个错误*ngFor:
Unhandled Promise rejection: Template parse errors:
'router-outlet' is not a known element:
1. If 'router-outlet' is an Angular component, then verify that it is …Run Code Online (Sandbox Code Playgroud) 目前,我在我的项目中设置了路由.每个新用户都被重定向到:
本地主机:4200 /默认的路径/登录
一旦用户登录,它们就会被重定向到主模块,主模块有一些用户可以导航到的子路由.
localhost:4200/default-path/home
localhost:4200/default-path/home/account
localhost:4200/default-path/home/account/profile
localhost:4200/default-path/home/dashboard
... 等等.
现在,粗体部分已在主页模块中设置,无需进一步编辑.但是,我想换个default-path别的东西.
比如说,每个用户都可以属于三个项目之一:项目蓝色,红色或绿色.只有在用户提交凭据并点击登录按钮后,才能使用此信息.
登录后我想要的路线是:
localhost:4200/project-blue/home
localhost:4200/project-red/home
localhost:4200/project-green/home
请记住,粗体部分不是具有不同关联组件的不同模块,它们只是我想在URL中看到的常量.
目前,我<base>在索引中的标记就像<base href='/'>我正在尝试编辑此属性.我得到的是:
processLoginSuccess(loginTicket): void {
const routeName = loginTicket.baseUrl // returns 'project-red'
let b = document.getElementsByTagName('base')[0]
b.setAttribute('href', routeName )
this._router.navigate(['/home']);
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
有任何想法吗?
我有一个窗口组件,我正在扩展以创建不同的窗口.现在,close()和hide()侦听器功能在整个板上是相同的,但afterrender()每个实例的更改.
所以我有类似的东西:
Ext.define('abc.xyz.BaseWindow', {
extend : "Ext.Window",
listeners: {
hide: function(el, eOpts){
console.log('hide');
},
close: function(el, eOpts){
console.log('close');
}
}
});
Run Code Online (Sandbox Code Playgroud)
和:
Ext.define('abc.xyz.MyWindow', {
extend : "abc.xyz.BaseWindow",
listeners: {
afterrender: function(el, eOpts){
console.log('afterrender');
}
}
});
Run Code Online (Sandbox Code Playgroud)
然而,整个listeners对象无效,hide()并且close()永远不会被调用.有没有解决这个办法,除了指定hide()并close()在每一个扩展窗口?
我正在使用QUnit进行单元测试js和jquery.我的HTML看起来像这样:
<!DOCTYPE html>
<html>
<head>
<title>QUnit Test Suite</title>
<script src="../lib/jquery.js"></script>
<link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.16.0.css" type="text/css" media="screen">
<script type="text/javascript" src="http://code.jquery.com/qunit/qunit-1.16.0.js"></script>
<!--This is where I may have to add startPage.html--->
<script src="../login.js"></script>
<script src="../test/myTests.js"></script>
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
目前,我正在添加login.js,如图所示,我正确地获得了对login.js中定义的对象的引用.
但是,login.js中的函数包含对startPage.html中定义的某些dom元素的引用,这些元素位于其他位置.
所以,如果我说$('#login-btn'),那是一个错误.有没有什么办法解决这一问题?
我可以(a)将startPage.html引用到我上面给出的qunit页面吗?
(b)在我正在运行测试的文件(myTests.js)中引用或加载startPage.html:
QUnit.test( "a test", function( assert ) {
assert.equal( 1, "1", "String '1' and number 1 have the same value" );//works
assert.equal( login.abc, "abc", "Abc" );//works with attributes
assert.equal(($("#userid").val()),'', 'Userid field is present');//fails
assert.equal( login.ValidUserId(), …Run Code Online (Sandbox Code Playgroud) 这是此处已提出并回答的问题的后续内容。
基本上,对于这样的表
Ford
Ford
Ford
Honda
Chevy
Honda
Honda
Chevy
Run Code Online (Sandbox Code Playgroud)
如果需要包含出现次数的输出,如下所示:
Ford 3
Honda 3
Chevy 2
Run Code Online (Sandbox Code Playgroud)
查询是:
select car_made, count(*) from cars
group by car_made
Run Code Online (Sandbox Code Playgroud)
现在,我想要的是输出仅显示计数大于 2 的那些值。因此,所需的输出:
Ford 3
Honda 3
Run Code Online (Sandbox Code Playgroud)
我该如何编写查询呢?
我试过
select car_made, count(*) as carcount
from cars
where carcount>2
group by car_made
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用。
angular ×5
javascript ×3
angular-cli ×2
html ×2
css ×1
extjs ×1
extjs4.2 ×1
function ×1
jquery ×1
macos ×1
mysql ×1
qunit ×1
unit-testing ×1