忽略Angular 组件

2lpgd968  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(326)

目前我正在尝试将angular js项目迁移到angular(12+)。我创建了第一个angular组件,并尝试将其降级,以便它们可以使用angular js。但是当页面加载时,Angular 组件将被忽略,并且不会抛出任何错误(无论是在使用webpack构建时,还是在加载页面时)。浏览器只渲染按钮栏和工具栏(仍然使用angular js实现)。
这是我的webpack.config.js:

  1. module.exports = {
  2. devtool: "eval-cheap-source-map",
  3. mode: 'development',
  4. entry: "./main.ts",
  5. output: {
  6. filename: "./angular/bundle/bundledProjectModule.js"
  7. },
  8. resolve: {
  9. extensions: [".webpack.js", ".web.js", ".ts", ".tsx", ".js"]
  10. },
  11. module: {
  12. rules: [
  13. //all files with a '.ts' or '.tsx' extension will be handled by 'ts-loader'
  14. { test: /\.tsx?$/, use: "ts-loader" }
  15. ]
  16. },
  17. stats: {
  18. logging: 'verbose'
  19. }
  20. };

这是我的tsconfig.json:

  1. {
  2. "compilerOptions": {
  3. "baseUrl": "",
  4. "emitDecoratorMetadata": true,
  5. "experimentalDecorators": true,
  6. "module": "ESNext",
  7. "target": "es5",
  8. "sourceMap": true,
  9. "moduleResolution": "node",
  10. "lib": ["dom", "es2016", "es2019.object"]
  11. },
  12. "typeRoots": [
  13. "./node_modules/@types"
  14. ],
  15. "exclude": [
  16. "node_modules"
  17. ]
  18. }

这是我的主要观点

  1. // Angular JS modules
  2. import 'angular';
  3. import 'angular-resource';
  4. import 'angular-animate';
  5. import 'angular-aria';
  6. import 'angular-messages';
  7. import 'angular-sanitize';
  8. import 'angular-route';
  9. // LEARN modules
  10. import './learn.main'
  11. import './angular/generalComponents/button';
  12. import './angular/generalComponents/cell-items';
  13. import './angular/generalComponents/filter/search-bar';
  14. import './angular/generalComponents/filter/date';
  15. import './angular/generalComponents/view-fields';
  16. import './angular/generalServices';
  17. import './modules/project';
  18. import './modules/project/view/linked-modules';
  19. import './modules/project/view';
  20. import {projectRootViewComponent} from "./modules/project/view/project-root-view.component";
  21. import {viewExternalLinkComponent} from "./angular/generalComponents/view-fields/view-external-link.component";
  22. import {viewComponent} from "./angular/generalComponents/view-fields/view.component";
  23. import {viewUserComponent} from "./angular/generalComponents/view-fields/view-user.component";
  24. // Modules necessary for the browser
  25. import './polyfills';
  26. // Angular Material modules
  27. import {MatFormFieldModule} from "@angular/material/form-field";
  28. import {MatInputModule} from "@angular/material/input";
  29. import {MatButtonModule} from "@angular/material/button";
  30. import {MatIconModule} from "@angular/material/icon";
  31. //Angular modules
  32. import {NgModule} from '@angular/core';
  33. import {BrowserModule} from '@angular/platform-browser';
  34. import {downgradeModule, UpgradeModule} from '@angular/upgrade/static';
  35. import {platformBrowserDynamic} from '@angular/platform-browser-dynamic';
  36. import {FormsModule} from "@angular/forms";
  37. @NgModule({
  38. imports: [
  39. BrowserModule,
  40. UpgradeModule,
  41. MatFormFieldModule,
  42. MatInputModule,
  43. MatButtonModule,
  44. MatIconModule,
  45. FormsModule
  46. ],
  47. declarations: [
  48. projectRootViewComponent,
  49. viewExternalLinkComponent,
  50. viewComponent,
  51. viewUserComponent
  52. ],
  53. entryComponents: [
  54. projectRootViewComponent,
  55. viewExternalLinkComponent,
  56. viewComponent,
  57. viewUserComponent
  58. ]
  59. })
  60. export class AppModule {
  61. // Override Angular bootstrap so it doesn't do anything
  62. ngDoBootstrap() {
  63. }
  64. }
  65. // Bootstrap using the UpgradeModule
  66. platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => {
  67. console.log("Bootstrapping in Hybrid mode with Angular & AngularJS");
  68. const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule;
  69. upgrade.bootstrap(document.body, ['learn']);
  70. console.log("Bootstrapping in Hybrid mode with Angular & AngularJS");
  71. });

此处是添加Angular 组件(项目根视图)的位置:

  1. {% extends "skeleton.twig" %}
  2. {% set config_module = config_module_project %}
  3. {% set page_name = 'View' %}
  4. {% block content %}
  5. <div layout-align="center start" flex="90">
  6. {% include "buttonbar/project/view.twig" %}
  7. <project-root-view></project-root-view>
  8. </div>
  9. {% endblock %}

这就是组件的实现:

  1. import * as angular from "angular";
  2. import {Component, EventEmitter, Input, OnInit, Output} from "@angular/core";
  3. import {downgradeComponent} from "@angular/upgrade/static";
  4. @Component({
  5. selector: 'project-root-view',
  6. templateUrl: '/learn/templates/0/modules/project/view/project-root-view.html'
  7. })
  8. export class projectRootViewComponent implements OnInit{
  9. data = {"id":"1","name":"name","opportunity_id":"12345"};
  10. project = {};
  11. projectId: string;
  12. id: string;
  13. ngOnInit() {
  14. this.project = this.data;
  15. this.projectId = this.data.id;
  16. if(this.data.opportunity_id) {
  17. this.id = this.data.opportunity_id;
  18. }
  19. else {
  20. this.id = this.data.id;
  21. }
  22. }
  23. }
  24. angular.module('learn').directive('project-root-view', downgradeComponent({component: projectRootViewComponent}));

这是组件的模板:

  1. <div layout="row" layout-align="space-around start" flex>
  2. <div layout="column" flex=100 flex-gt-md=85 flex-gt-lg=75>
  3. <div class="md-whiteframe-3dp oe-frame-l">
  4. <h1 class="oe-title">Project<small> - {{id}}</small></h1>
  5. <div layout="row" flex>
  6. <view [labelName]="'Project'" [data]="project.name" flex></view>
  7. <view [labelName]="'Opportunity ID'" [data]="project.opportunity_id" flex></view>
  8. </div>
  9. </div>
  10. </div>
  11. </div>

这是(次)Angular 组件(称为视图):

  1. @Component({
  2. selector: 'view',
  3. templateUrl: './angular/generalComponents/view-fields/view.html'
  4. })
  5. export class viewComponent implements OnInit {
  6. hasValue = false;
  7. empty_placeholder = "n/a";
  8. label: string;
  9. value: string;
  10. @Input() labelName;
  11. @Input() data;
  12. ngOnInit() {
  13. this.label = this.labelName;
  14. if(this.data) {
  15. this.value = this.data;
  16. this.hasValue = true;
  17. }
  18. else {
  19. this.value = this.empty_placeholder;
  20. }
  21. }
  22. }
  23. angular.module('learn').directive('view', downgradeComponent({component:viewComponent}));

和视图组件的模板:

  1. <div class="oe-input-wrapper" flex>
  2. <mat-form-field class="md-block oe-input-view-nb" flex>
  3. <mat-label>{{ label }}</mat-label>
  4. <textarea matInput disabled *ngClass="{'empty': !hasValue}">{{ value }}</textarea>
  5. </mat-form-field>
  6. </div>

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题