Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/426.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Angular2中创建链接组件_Javascript_Angular - Fatal编程技术网

Javascript 在Angular2中创建链接组件

Javascript 在Angular2中创建链接组件,javascript,angular,Javascript,Angular,希望在Angular 2中创建包装器组件,类似于和其他工具允许您创建包装器组件的方式。希望能够重复使用该组件,这样我们就不必每次都重复该结构 基本上,我希望能够重用具有这种粗略结构的组件: 'use strict'; import { ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from 'angular2/router'; import {Component, Input} from 'angular2/core'; @Component({ select

希望在Angular 2中创建包装器组件,类似于和其他工具允许您创建包装器组件的方式。希望能够重复使用该组件,这样我们就不必每次都重复该结构

基本上,我希望能够重用具有这种粗略结构的组件:

'use strict';
import { ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from 'angular2/router';
import {Component, Input} from 'angular2/core';

@Component({
  selector: 'nav-item',
  directives: [ROUTER_DIRECTIVES],
  providers: [ROUTER_PROVIDERS],
  template: `
  <li>
     <a routerLink="<SPECIFIED ROUTE>">
      <ng-content></ng-content>
    </a>
  </li>
  `,
})

export default class NavLink {
  public static $injector: Array<string> = [];
  @Input() to: string;
  constructor() {}
}
我只是不确定将数据传递到绑定属性的工作方式;我来自React的背景,所以东西是通过
props
传递的,你可以检查类型,这几乎就是普通的JavaScript对象传递


访问绑定属性和/或这是我试图实现的反模式的最佳方式是什么?

我认为Angular2组件是React组件的更强大版本,您可以用更少的资源做更多的事情。我不确定这是好是坏,但我只知道你可能不需要像在React中那样抽象那么多东西,或者想抽象那么多东西。这是因为有了更多的预构建工具,这可能会再次减少你做某些事情的自由度,并使你更快地做其他事情

我还要说,在React中来回传递值至少对我来说更直观

接下来,我们将介绍正确的语法以及Angular2中路由的工作原理。虽然你可能已经知道了这一点,但我还是要把它贴出来,以防有人读到

您可以从一个@RouteConfig装饰器开始,该装饰器接受一组对象,并使它们可用于您的应用程序。因此,在你的情况下,你会有如下情况:

@RouteConfig([
    {path: '/wine', name: 'Wine', component: Wine},
    //or just so you can see it in case you haven't how to add params!
    {path: '/wine/:type', name: 'WineType', component: WineType}
])
现在要访问routerlink,您需要传递它:

<a [routerLink] = "['/Wine'] </a>
<a [routerLink] = "['/WineType', {type: type.ID}]}> </a>

现在回答你关于来回传递东西的问题

对于您的第一个组件,您应该将以下内容:

  <li>
     <a routerLink="[to]">
      <ng-content></ng-content>
    </a>
  </li>
  • 因此,您很可能希望将to字符串括在方括号中,以便语法适用于routerLink

    对于第二个组件Navbar,语法非常接近,但并不精确

       <div class="row">
          <ul>
            <nav-item [to]="/Wines"></nav-item>
          </ul>
        </div>
    
    
    
    这表示将“/Wines”传递到子组件中的变量[to]。它必须放在方括号内

    如果你有一个导航栏项目列表,你可以这样做:

    'use strict';
    
    import {Component} from 'angular2/core';
    import NavLink from './link.component';
    
    @Component({
      selector: 'Navbar',
      host: {'class': 'navbar'},
      directives: [NavLink],
      template: `
        <div class="row">
          <ul>
            <nav-item *ngFor="#item of items [to]=item>
            </nav-item>
          </ul>
        </div>
      `,
    })
    
    export default class Nav {
      all_my_routes: Array<string> = [];
      constructor() {
        all_my_routes = ['/Wine', '/OtherWine', '/Beer']
      }
    }
    
    “严格使用”;
    从'angular2/core'导入{Component};
    从“/link.component”导入导航链接;
    @组成部分({
    选择器:“导航栏”,
    主机:{'class':'navbar'},
    指令:[NavLink],
    模板:`
    
        <li>
           <a routerLink="[to]">
            <ng-content></ng-content>
          </a>
        </li>
      
         <div class="row">
            <ul>
              <nav-item [to]="/Wines"></nav-item>
            </ul>
          </div>
      
      'use strict';
      
      import {Component} from 'angular2/core';
      import NavLink from './link.component';
      
      @Component({
        selector: 'Navbar',
        host: {'class': 'navbar'},
        directives: [NavLink],
        template: `
          <div class="row">
            <ul>
              <nav-item *ngFor="#item of items [to]=item>
              </nav-item>
            </ul>
          </div>
        `,
      })
      
      export default class Nav {
        all_my_routes: Array<string> = [];
        constructor() {
          all_my_routes = ['/Wine', '/OtherWine', '/Beer']
        }
      }