小编Sno*_*man的帖子

这是一个纯函数吗?

大多数将纯函数定义为具有以下两个属性:

  1. 对于相同的参数,其返回值相同。
  2. 其评估没有副作用。

这是与我有关的第一个条件。在大多数情况下,很容易判断。考虑以下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)

javascript functional-programming function

96
推荐指数
7
解决办法
7308
查看次数

如何使材料组件与Karma一起在单元测试中使用Angular

我有一个角度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

20
推荐指数
3
解决办法
2万
查看次数

使用Angular2中的Karma启用按钮时的单元测试

我使用角度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)

unit-testing karma-jasmine angular-cli angular

11
推荐指数
1
解决办法
1万
查看次数

如何检测滚动条是否占用 OS X Chrome 中的空间?

我有一些代码假设 OS X 的垂直滚动条宽度为 15px,并相应地进行一些布局。

这适用于 Mac。然而,在 Macbook 上,Chrome 的滚动条似乎并没有占用任何额外的空间。它显示为页面内容上的覆盖层。这会导致布局有点扭曲。

有什么方法可以检测滚动条是否为 Apple 台式机/笔记本电脑上的 Chrome 保留了空间?

html css macos google-chrome

6
推荐指数
1
解决办法
2650
查看次数

角度为2的双向绑定数组

我知道在角度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-directives angular

6
推荐指数
1
解决办法
1万
查看次数

如何在 angular 2.4.2 中的 *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)

angular2-routing angular

5
推荐指数
0
解决办法
835
查看次数

如何在Angular 2路由中动态更改基本URL?

目前,我在我的项目中设置了路由.每个新用户都被重定向到:

本地主机: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)

但这似乎不起作用.

有任何想法吗?

html angular2-routing angular

3
推荐指数
1
解决办法
1万
查看次数

Extjs:覆盖特定的侦听器

我有一个窗口组件,我正在扩展以创建不同的窗口.现在,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()在每一个扩展窗口?

extjs extjs4.2

2
推荐指数
1
解决办法
3875
查看次数

如何在QUnit中加载不同的html文件?

我正在使用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)

javascript jquery qunit

2
推荐指数
1
解决办法
2454
查看次数

按出现次数过滤 SQL 列

这是此处已提出并回答的问题的后续内容

基本上,对于这样的表

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)

但这似乎不起作用。

mysql

2
推荐指数
1
解决办法
709
查看次数