Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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
Angularjs 如何在Angular2中使用自定义渲染器_Angularjs_Angular - Fatal编程技术网

Angularjs 如何在Angular2中使用自定义渲染器

Angularjs 如何在Angular2中使用自定义渲染器,angularjs,angular,Angularjs,Angular,我是个新手,我很难解决以下问题 我希望在DOM中呈现组件模板的内容。目标是生成一个样式指南,我想在其中显示模板的代码片段。因此,我需要转义模板内容 我尝试了几种方法,并提出了一种可能的解决方案来创建一个自定义渲染器,该渲染器可以逃逸模板输出 我想这可能和这里描述的一样简单: 但是事实并非如此 我在这里创建了一个自定义渲染器,它首先应该像默认的DebugDomRenderer一样工作。但是我不知道如何使用这个渲染器 我试过这样的方法: import {Component} from '@angul

我是个新手,我很难解决以下问题

我希望在DOM中呈现组件模板的内容。目标是生成一个样式指南,我想在其中显示模板的代码片段。因此,我需要转义模板内容

我尝试了几种方法,并提出了一种可能的解决方案来创建一个自定义渲染器,该渲染器可以逃逸模板输出

我想这可能和这里描述的一样简单: 但是事实并非如此

我在这里创建了一个自定义渲染器,它首先应该像默认的DebugDomRenderer一样工作。但是我不知道如何使用这个渲染器

我试过这样的方法:

import {Component} from '@angular/core';
import {EscapeRootRenderer} from "../../renderer/escapeRootRenderer";
import {DebugDomRootRenderer} from "@angular/core/src/debug/debug_renderer";

@Component({
  selector:'escape',
  template:'<pre><code><ng-content></ng-content></code></pre>',
  providers:[
    {provide: DebugDomRootRenderer, useClass:EscapeRootRenderer}
  ]
})

export class EscapeComponent{

}
从'@angular/core'导入{Component};
从“./../renderer/EscapeRootRenderer”导入{EscapeRootRenderer}”;
从“@angular/core/src/debug/debug_renderer”导入{debugdomrootdrenderer}”;
@组成部分({
选择器:'escape',
模板:“
”, 供应商:[ {提供:DebugDomRootRenderer,useClass:EscapeRootRenderer} ] }) 导出类EscapeComponent{ }
这部分还没有准备好。我的计划是带上ChildViews并让他们逃跑

我的EscapeRootRender与的功能完全相同,只是我删除了调试内容并添加了一些console.logs()

import{Injectable,RenderComponentType,Renderer,RootRenderer}来自“@angular/core”;
从“@angular/core/esm/src/animation/animation_styles”导入{AnimationStyles}”;
从“@angular/core/esm/src/animation/animation_keyframe”导入{AnimationKeyframe}”;
@可注射()
导出类EscapeRootRenderer实现RootRenderer{
构造函数(私有_委托:RootRenderer){
console.log('escaperotrotrender'构造)
console.log(_委托)
}
renderComponent(componentProto:RenderComponentType):转义符{
log('escaperotrotrender-renderComponent');
返回新的EscapeRenderer(this._delegate.renderComponent(componentProto));
}
}
导出类转义器实现渲染器{
构造函数(私有委托:呈现器){
log('EscapeRenderer-constructed');
}
设置动画(元素:任意,开始样式:animationstyle,关键帧:AnimationKeyframe[],持续时间:数字,延迟:数字,缓和:字符串):任意{
log('EscapeRenderer animate');
返回此。\u委托.动画(元素、开始样式、关键帧、持续时间、延迟、缓和);
}
selectRootElement(选择器:字符串):任意{
log('EscapeRenderer selectRootElement');
var nativeEl=this.\u delegate.selectRootElement(选择器);
返回nativeEl;
}
createElement(parentElement:any,name:string):any{
log('EscapeRenderer createElement');
var nativeEl=this.\u delegate.createElement(parentElement,name);
返回nativeEl;
}
createViewRoot(hostElement:any):any{
log('EscapeRenderer createViewRoot');
返回此项。_delegate.createViewRoot(hostElement);}
createTemplateAnchor(parentElement:any):any{
log('EscapeRenderer createTemplateAnchor');
var comment=this.\u delegate.createTemplateAnchor(parentElement);
回复评论;
}
createText(parentElement:any,value:string):any{
log('EscapeRenderer createText');
var text=this.\u delegate.createText(parentElement,value);
返回文本;
}
projectNodes(父元素:任意,节点:任意[]){
log('EscapeRenderer projectNodes');
返回此.\u delegate.projectNodes(parentElement,nodes);
}
attachViewAfter(节点:任意,viewRootNodes:任意[]){
log('EscapeRenderer attachViewAfter');
返回此。\u delegate.attachViewAfter(节点,viewRootNodes);
}
detachView(viewRootNodes:任意[]){
log('escaperender detachView');
返回此。_delegate.detachView(viewRootNodes);
}
destroyView(hostElement:any,viewAllNodes:any[]){
log('EscapeRenderer destroyView');
返回此._delegate.destronView(hostElement,viewAllNodes);
}
侦听(renderElement:any,name:string,callback:Function){
log('EscapeRenderer listen');
返回此。_delegate.listen(渲染、名称、回调);
}
listenGlobal(目标:字符串,名称:字符串,回调:函数):函数{
log('EscapeRenderer listenGlobal');
返回此._delegate.listenGlobal(目标、名称、回调);
}
setElementProperty(renderElement:any,propertyName:string,propertyValue:any){
log('EscapeRenderer setElementProperty');
返回此.u delegate.setElementProperty(renderElement、propertyName、propertyValue);
}
setElementAttribute(renderElement:any、attributeName:string、attributeValue:string){
log('EscapeRenderer setElementAttribute');
返回此属性。_delegate.setElementAttribute(renderElement、attributeName、attributeValue);
}
/**
*仅在调试模式下用于将属性更改序列化到注释节点,
*例如占位符。
*/
setBindingDebugInfo(RenderRelation:any,propertyName:string,propertyValue:string){
log('EscapeRenderer setBindingDebugInfo');
返回此参数。\u delegate.setBindingDebugInfo(RenderRelation、propertyName、propertyValue);
}
setElementClass(renderElement:any,className:string,isAdd:boolean){
log('EscapeRenderer setElementClass');
返回此._delegate.setElementClass(渲染、类名、isAdd);
}
setElementStyle(renderElement:any,styleName:string,styleValue:string){
log('EscapeRenderer setElementStyle');
返回此值。_delegate.setElementStyle(renderElement、styleName、styleValue);
}
invokeElementMethod(renderElement:any,methodName:string,args:any[]){
log('EscapeRenderer invokeElementMethod');
返回此._delegate.invokeElementMethod(renderElement,methodName,args);
}
setText(renderNode:any,text:string){
log('EscapeRenderer setText');
返回此.u delegate.setText(renderNode,text);
import {Injectable, RenderComponentType, Renderer, RootRenderer} from '@angular/core';

import {AnimationStyles} from "@angular/core/esm/src/animation/animation_styles";
import {AnimationKeyframe} from "@angular/core/esm/src/animation/animation_keyframe";


@Injectable()
export class EscapeRootRenderer implements RootRenderer {

  constructor(private _delegate:RootRenderer) {
    console.log('EscapeRootRenderer constructed')
    console.log(_delegate)
  }


  renderComponent(componentProto: RenderComponentType): EscapeRenderer {
    console.log('EscapeRootRenderer - renderComponent');
    return new EscapeRenderer(this._delegate.renderComponent(componentProto));
  }

}

export class EscapeRenderer implements Renderer{

  constructor(  private _delegate: Renderer){
    console.log('EscapeRenderer constructed');
  }

  animate(element: any, startingStyles: AnimationStyles, keyframes: AnimationKeyframe[], duration: number, delay: number, easing: string): any {
    console.log('EscapeRenderer animate');
    return this._delegate.animate(element, startingStyles, keyframes, duration, delay, easing);
  }

  selectRootElement(selector: string): any {
    console.log('EscapeRenderer selectRootElement');
    var nativeEl = this._delegate.selectRootElement(selector);
    return nativeEl;
  }

  createElement(parentElement: any, name: string): any {
    console.log('EscapeRenderer createElement');
    var nativeEl = this._delegate.createElement(parentElement, name);
    return nativeEl;
  }

  createViewRoot(hostElement: any): any {
    console.log('EscapeRenderer createViewRoot');
    return this._delegate.createViewRoot(hostElement); }

  createTemplateAnchor(parentElement: any): any {
    console.log('EscapeRenderer createTemplateAnchor');
    var comment = this._delegate.createTemplateAnchor(parentElement);
    return comment;
  }

  createText(parentElement: any, value: string): any {
    console.log('EscapeRenderer createText');
    var text = this._delegate.createText(parentElement, value);
    return text;
  }

  projectNodes(parentElement: any, nodes: any[]) {
    console.log('EscapeRenderer projectNodes');
    return this._delegate.projectNodes(parentElement, nodes);
  }

  attachViewAfter(node: any, viewRootNodes: any[]) {
    console.log('EscapeRenderer attachViewAfter');
    return this._delegate.attachViewAfter(node, viewRootNodes);
  }

  detachView(viewRootNodes: any[]) {
    console.log('EscapeRenderer detachView');
    return this._delegate.detachView(viewRootNodes);
  }

  destroyView(hostElement: any, viewAllNodes: any[]) {
    console.log('EscapeRenderer destroyView');
    return this._delegate.destroyView(hostElement, viewAllNodes);
  }

  listen(renderElement: any, name: string, callback: Function) {
    console.log('EscapeRenderer listen');
    return this._delegate.listen(renderElement, name, callback);
  }

  listenGlobal(target: string, name: string, callback: Function): Function {
    console.log('EscapeRenderer listenGlobal');
    return this._delegate.listenGlobal(target, name, callback);
  }

  setElementProperty(renderElement: any, propertyName: string, propertyValue: any) {
    console.log('EscapeRenderer setElementProperty');
    return this._delegate.setElementProperty(renderElement, propertyName, propertyValue);
  }

  setElementAttribute(renderElement: any, attributeName: string, attributeValue: string) {
    console.log('EscapeRenderer setElementAttribute');
    return this._delegate.setElementAttribute(renderElement, attributeName, attributeValue);
  }

  /**
   * Used only in debug mode to serialize property changes to comment nodes,
   * such as <template> placeholders.
   */
  setBindingDebugInfo(renderElement: any, propertyName: string, propertyValue: string) {
    console.log('EscapeRenderer setBindingDebugInfo');
    return this._delegate.setBindingDebugInfo(renderElement, propertyName, propertyValue);
  }


  setElementClass(renderElement: any, className: string, isAdd: boolean) {
    console.log('EscapeRenderer setElementClass');
    return this._delegate.setElementClass(renderElement, className, isAdd);
  }

  setElementStyle(renderElement: any, styleName: string, styleValue: string) {
    console.log('EscapeRenderer setElementStyle');
    return this._delegate.setElementStyle(renderElement, styleName, styleValue);
  }

  invokeElementMethod(renderElement: any, methodName: string, args: any[]) {
    console.log('EscapeRenderer invokeElementMethod');
    return this._delegate.invokeElementMethod(renderElement, methodName, args);
  }

  setText(renderNode: any, text: string) {
    console.log('EscapeRenderer setText');
    return this._delegate.setText(renderNode, text); }

}
import {
  Component, ViewChild, OnInit, AfterViewInit, OnInit
} from '@angular/core';


@Component({
  selector:'escape',
  template:'<content #kiddo><ng-content></ng-content></content><pre><code #codeContent>{{componentInnerHTML}}</code></pre>'
})

export class EscapeComponent implements OnInit, AfterViewInit{
  @ViewChild('kiddo') viewChild;
  @ViewChild('codeContent') codeContent;
  componentInnerHTML:string;

  ngAfterViewInit(){
    this.componentInnerHTML = this.viewChild.nativeElement.innerHTML;
  }

  ngOnInit(){
    var that = this;
    setTimeout(()=>hljs.highlightBlock(that.codeContent.nativeElement), 1)
  }
}
<pre ngNonBindable>
    template content here
</pre>