小编Mar*_*cok的帖子

如何在Angular2中的对象数组上使用select/option/NgFor

我在Angular2中创建一个由Object数组而不是字符串支持的选择时遇到了麻烦.我知道如何使用ngOptions在AngularJS中执行此操作,但它似乎不适用于Angular2(我使用的是alpha 42).

在下面的示例中,我有四个选择,但只有两个选择.

  1. 'Select String'是一个简单的基于字符串的选择,它工作正常.
  2. '通过双向绑定选择对象'是我尝试使用双向绑定.不幸的是,它以两种方式失败 - 当页面加载时,select显示错误的值(foo而不是bar),当我在列表中选择一个选项时,值'[object Object]'被发送到后备存储而不是正确的价值.
  3. '通过事件选择对象'是我尝试从$ event获取所选值.它也以两种方式失败 - 初始加载与#2一样不正确,当我在列表中选择一个选项时,从事件中检索到'[object Object]'的值,所以我不能得到正确的价值.选择被清除.
  4. '通过字符串选择对象'是使用有效对象的唯一方法.不幸的是,它确实通过使用#1中的字符串数组并将值从字符串转换为对象和返回来实现.

如果这是预期的方式,我可以做#4,但它看起来很笨重.还有另一种方法吗?我是不是太早了?我做了些傻事吗?

import {Component, FORM_DIRECTIVES, NgFor} from 'angular2/angular2';

interface TestObject {
  name:string;
  value:number;
}

@Component({
  selector: 'app',
  template: `
    <h4>Select String</h4>
    <select [(ng-model)]="strValue">
        <option *ng-for="#o of strArray" [value]="o">{{o}}</option>
    </select>

    <h4>Select Object via 2-way binding</h4>
    <select [(ng-model)]="objValue1">
        <option *ng-for="#o of objArray" [value]="o">{{o.name}}</option>
    </select>

    <h4>Select Object via event</h4>
    <select [ng-model]="objValue2" (change)="updateObjValue2($event)">
        <option *ng-for="#o of objArray" [value]="o">{{o.name}}</option>
    </select>

    <h4>Select Object via string</h4>
    <select [ng-model]="objValue3.name" (change)="updateObjValue3($event)"> …
Run Code Online (Sandbox Code Playgroud)

typescript angular

49
推荐指数
2
解决办法
13万
查看次数

在Angular 2中使用逗号作为列表分隔符

我想在我的模板中创建一个项目列表,用逗号分隔,但我不希望最后一个项目有逗号:

one, two, three
Run Code Online (Sandbox Code Playgroud)

如何使用Angular 2的模板语法实现此目的?

angular2-template angular

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

如何将父组件注入子组件?

我正在尝试将父组件注入子组件.我认为这很简单 - 只需在子代中指定/注入父组件constructor():

constructor(private _parent:AppComponent) {}   // child component constructor
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

EXCEPTION:无法解析ChildComponent(?)的所有参数.确保它们都具有有效的类型或注释.

我错过了什么?

ChildComponent:

import {Component} from 'angular2/core';
import {AppComponent} from './app.component';

@Component({
  selector: 'child',
  template: `<p>child</p>`
})
export class ChildComponent {
  constructor(private _parent:AppComponent) {}
}
Run Code Online (Sandbox Code Playgroud)

AppComponent:

import {Component} from 'angular2/core';
import {ChildComponent} from './child.component';

@Component({
  selector: 'my-app',
  template: `{{title}} <child></child>
  `,
  directives: [ChildComponent]
})
export class AppComponent {
  title = "Angular 2 - inject parent";
  constructor() { console.clear(); }
}
Run Code Online (Sandbox Code Playgroud)

Plunker

angular2-di angular

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

在ng-repeat中通过ng-click调用的赋值表达式的行为

我正在尝试使用ng-click附加到更新我的模型<p>.

我有一个赋值表达式没有问题ng-repeat,或者与调用方法的范围ng-repeat.不过,如果我使用赋值里面ng-repeat,它似乎被忽略.我没有在Firefox控制台中看到任何消息报告,但是没有尝试设置断点以查看事件是否被触发.

<!DOCTYPE html>
<html>
<head>
    <title>Test of ng-click</title>
    <script type='text/javascript' src='http://code.angularjs.org/1.1.1/angular.js'></script>
    <script type='text/javascript'>//<![CDATA[ 

        function MyCtrl($scope) {
            $scope.selected = "";
            $scope.defaultValue = "test";
            $scope.values = ["foo", "bar", "baz"];

            $scope.doSelect = function(val) {
                $scope.selected = val;
            }
        }
        //]]>  

    </script>
</head>

<body ng-app>
    <div ng-controller='MyCtrl'>
        <p>Selected = {{selected}}</p>
        <hr/>
        <p ng-click='selected = defaultValue'>Click me</p>
        <hr/>
        <p ng-repeat='value in values' ng-click='selected = value'>{{value}}</p>
        <hr/>
        <p ng-repeat='value …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-scope

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

Angular2 ngFor跳过第一个索引

如何跳过数组中的第一个索引?

<li *ngFor="#user of users">
    {{ user.name }} is {{ user.age }} years old.
  </li>
Run Code Online (Sandbox Code Playgroud)

angular2-directives angular

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

如何在Scala中创建异构数组?

在javascript中,我们可以这样做:

["a string", 10, {x : 1}, function() {}].push("another value");
Run Code Online (Sandbox Code Playgroud)

什么是Scala等价物?

arrays scala

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

Ng-repeat-start in angular2 - 也就是使用NgFor重复多个元素

我需要li在Angular2的列表中为每个项重复几个元素.在角度1.x我使用ng-repeat-startng-repeat-end为此.我无法在Angular 2中找到正确的方法.有一些较旧的博客文章,但他们的建议不适用于最新的Angular2测试版.

<li>应该为每个类别重复所有元素:(我通常会对属性进行处理*ngFor="#category of categories"- 但我找不到放在哪里...

救命?

<ul class="dropdown-menu" role="menu">
    <li class="dropdown-header">
        {{ category.title }}
    </li>
    <li>
        <a href="{{ '/music/' + tag.keyword }}" *ngFor="#tag of category.tags" [hidden]="tag.deleted === 1">{{ tag.tag_title_da }}</a>
    </li>
    <li class="divider"></li>

    <li class="dropdown-header">Alle musikstykker</li>
    <li><a href="/music/all">Alle musikstykker</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

angular2-template angular

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

父组件的angular 2访问子组件属性

需要访问属性children元素.家长:

<div>
   <shipment-detail #myCarousel ></shipment-detail>
</div>
Run Code Online (Sandbox Code Playgroud)
@Component({
  selector: "testProject",
  templateUrl: "app/partials/Main.html",
  directives: [ShipmentDetail] })
class AppComponent { 
  getChildrenProperty() {
  // I want to get access to "shipment" 
  }
}
Run Code Online (Sandbox Code Playgroud)

儿童:

@Component({
  selector: "shipment-detail",
}) 
export class ShipmentDetail  {
  shipment: Shipment;
}
Run Code Online (Sandbox Code Playgroud)

typescript angular

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

核心和功能模块之间的角度2差异

我不明白角度2中的核心功能模块之间的区别.据我所知,有三种推荐的模块类型:核心,功能共享.

如果模块导出一些声明(组件,指令和管道),并且许多模块将导入该模块,则该模块应该是共享模块(在共享目录中).

如果模块表示某些声明(组件,指令和管道)并且只有根模块将导入该模块,则该模块应该是核心模块(在核心目录中).

功能模块是否相同?只有root模块导入它们.在示例中,有一个CoreModule和一个名为ContactModule的功能模块.我没有看到它们之间的区别.它们都在根模块中导入.

javascript angular2-modules angular

23
推荐指数
1
解决办法
6101
查看次数

Angular2路由器,从url获取路由数据,以显示面包屑

我正在使用angular2路由器.

要绘制网址的面包屑,请说site.com/a/b/c/15我执行以下操作:

  1. 获取路线site.com/a/b/c/15并获得与路线相关联的漂亮名称
  2. 获取路线site.com/a/b/c并获得与路线相关联的漂亮名称
  3. 获取路线site.com/a/b并获得与路线相关联的漂亮名称
  4. 获取路线site.com/a并获得与路线相关联的漂亮名称

所以我想说我有以下路线:

{ path: 'a', component: A, data:{prettyName: 'I am A'}}
{ path: 'b', component: B, data:{prettyName: 'I am B'}},
{ path: 'c', component: C, data:{prettyName: 'I am C'}},
Run Code Online (Sandbox Code Playgroud)

我的过程的结果将是一个包含的数组,{"I am C", "I am B", "I am C"}并且由于我可以显示一个很好的面包屑"I am A > I am B > I am C"来解释当前的路线.

这用于使用路由器弃用的操作

this.router.recognize(url).then((instruction) => {
    instruction.component.routeData.get('prettyName') // Would return 'I am ..'
Run Code Online (Sandbox Code Playgroud)

但是现在; 使用最后一个路由器,我无法再处理这个识别逻辑. …

angular2-routing angular2-router angular

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