Angular2 Selector no coincide con ningún elemento de Componentes anidados


Tengo dos anidados @Components en angular 2. La vista se renderiza bien, pero siempre arroja un error de javascript la primera vez. Aquí está mi código en Typescript.

HTML de la aplicación:

<body>
    <my-app>loading...</my-app>
</body>

Componente de la aplicación:

import {bootstrap, Component} from 'angular2/angular2';
import {CanvasComponent} from "./CanvasComponent";

@Component({
  selector: 'my-app',
  template: `
      <h1>{{title}}</h1>
      <h2>My Games</h2>
      <div>
        <my-canvas></my-canvas>
      </div>
  `,
  directives: [CanvasComponent]
})

class AppComponent {
}

bootstrap(AppComponent);

Componente del lienzo:

import {bootstrap, Component, View} from 'angular2/angular2';

@Component({
  selector: 'my-canvas'
})

@View({
  template: `
  <div>
    <span>Balls:</span>
    <div>{{canvas.length}}</div>
  </div>
  `
})

export class CanvasComponent {
  canvas = [1,2,3];
}

bootstrap(CanvasComponent);

El error es:

EXCEPTION: The selector "my-canvas" did not match any elements
 29
Author: fos.alex, 2015-10-23

2 answers

Elimina bootstrap(CanvasComponent) de tu archivo CanvasComponent. Está intentando arrancar la aplicación por segunda vez usando CanvasComponent como root y buscando el elemento my-canvas en el HTML de tu aplicación. Por supuesto que no puede encontrarlo.

 50
Author: alexpods,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-23 22:23:55

Solucioné el problema cambiando el nombre en el índice.html, usted debe estar seguro de que la etiqueta en el índice.html son el mismo selector que en el componente principal.

    <html>
      <head>
        <title>Angular 2 QuickStart</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="stylesheets/styles.css">
        <!-- 1. Load libraries -->
         <!-- Polyfill(s) for older browsers -->
        <script src="node_modules/core-js/client/shim.min.js"></script>
        <script src="node_modules/zone.js/dist/zone.js"></script>
        <script src="node_modules/reflect-metadata/Reflect.js"></script>
        <script src="node_modules/systemjs/dist/system.src.js"></script>
        <!-- 2. Configure SystemJS -->
        <script src="systemjs.config.js"></script>
        <script>
        System.import('app').catch(function(err){ console.error(err); });
        </script>
      </head>
      <!-- 3. Display the application -->

      <body>
        <my-app>Loading...</my-app> <!-- THIS TAG SHOULD BE THE SAME THAT THE SELECTOR IN THE MAIN COMPONENT -->
      </body>
    </html>

<!-- end snippet -->

  </body>
</html>
 17
Author: Andres Hernandez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-27 21:55:45