小编Sky*_*ler的帖子

Angular 2:从组件模板绑定到函数

在角1我们避免了从超过模板表达式,如内部调用函数ng-repeat="item in vm.getFilteredItems()",因为属性更改无关的结果getFilteredItems会导致功能重复和不必要的重新计算的消化,这通常会导致性能问题的规模.相反,我们绑定到对象,并基于事件(例如ng-repeat="item in vm.filteredItems)进行计算.

在Angular 2中,脏检查过程已经过优化,但是当组件级别的任何属性发生更改时,仍会调用组件模板中调用的函数,无论该函数是否依赖于这些属性.如果使用不当,我预计这会导致相同的性能问题.

以下是Angular 2中不同方法的简化示例:

// function binding in template
@Component({
  selector: 'func',
  template: `
    <input [(ngModel)]="searchTerm" placeholder="searchTerm" />
    <div *ngFor="let name of filteredNames(searchTerm)">{{name}}</div>
  `
})
export class FuncComponent {
  @Input() names:string[];

  filteredNames(searchTerm) {

    if (!searchTerm) return this.names;

    let filteredNames = [];

    return this.names.filter((name) => {
      return name.toLowerCase().indexOf(searchTerm.toLowerCase()) > -1;
    });
  }
}
Run Code Online (Sandbox Code Playgroud)

-

// no function binding
@Component({
  selector: 'nofunc',
  template: `
    <input [(ngModel)]="searchTerm" (ngModelChange)="search($event)" placeholder="searchTerm" />
    <div *ngFor="let …
Run Code Online (Sandbox Code Playgroud)

angularjs angular

9
推荐指数
1
解决办法
7914
查看次数

Angular 2 + ngrx/store:单向绑定到 &lt;input&gt;

[ngModel]当通过上使用单向绑定时<input>,在输入中键入字符始终会将字符添加到 的<input>值中。问题是,如果[ngModel]表达式继续返回其现有值,则该<input>值不会刷新。

这是一个简单的例子:

@Component({
  selector: 'my-component',
  template: `
    <input type="text" [ngModel]="foo.bar" />
  `
})
export class MyComponent {
  private foo = {
    bar: 'baz'
  };
}
Run Code Online (Sandbox Code Playgroud)

我希望无论用户输入如何,输入始终显示“baz”,但事实并非如此。

我寻找这种行为的原因是针对 ngrx/store/redux 应用程序,其中 an<input>的值应由单向流动的状态确定。我在 Plunker 上创建了一个示例用例,其中 Misko Hevery 的描述不应该是可编辑的。模型确实没有改变,但<input>无论用户输入什么,都会显示出来。

在“No trackBy”部分,它可以正常工作,但这只是因为 Angular 正在重绘所有 DOM 元素,这会强制进行适当的重新评估(但这不是解决方案)。添加disabledreadonly属性<input>对我来说不是一个可接受的答案,因为组件应该不知道不允许更改此字段的潜在复杂状态逻辑。

我在 React Redux 中看到了这种行为,我想知道如果我们无法阻止用户改变自己的视图,我们如何在 Angular 2 中使用单向绑定。

ngrx angular

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

Angular CLI插件

Ember CLI有一个命令(ember addon <addon-name>),它将设计一个新项目,通过npm安装到其他Ember CLI项目中.这些"插件"项目也可以使用内置的"虚拟应用程序"独立构建和提供,该虚拟应用程序充当插件的假消费者,用于测试和演示目的.这对于快速创建在业务应用程序之间共享但也独立部署的样式指南/组件库非常有用.

我正在为Angular CLI项目寻找一个等价物,并且希望CLI能够提供类似的方法来创建插件,因为它基于Ember CLI.是否可以从另一个Angular CLI应用程序中使用Angular CLI应用程序,或者我是否必须使用手动(gulp/grunt)构建过程创建自己的"插件"?

谢谢!

Angular2相关:使用angular-cli创建的应用程序之间的依赖关系尚未解决.

angular-cli angular

5
推荐指数
1
解决办法
1178
查看次数

标签 统计

angular ×3

angular-cli ×1

angularjs ×1

ngrx ×1