当前位置: 首页 > 知识库问答 >
问题:

是否可以升级 angularjs atttribute 指令以用于 angular 4?

闻人宏盛
2023-03-14

我已经能够升级angularjs元素指令以用于angular 4。下面是一个示例代码:

[myScores.js]

angular.module('app.components.directives.myScores', [])
.directive('myScores', function() {
  return {
    scope: {
      score: '=',
    },
    template: '<div>&gt;&gt;&gt; Your score is {{score}} &lt;&lt;&lt;',
    link: function(scope) {
      console.log("in myScores", scope)
    }
  };
});

[myScores.ts]

import { Directive, ElementRef, Injector, Input, Output, EventEmitter } from '@angular/core';
import { UpgradeComponent } from '@angular/upgrade/static';

@Directive({
  selector: 'my-scores'
})
export class MyScoresDirective extends UpgradeComponent {
  @Input() score: number;

  constructor(elementRef: ElementRef, injector: Injector) {
    super('myScores', elementRef, injector);
  }
}

请注意,我正在使用 UpgradeComponent 来升级 myScores 元素指令。我已经在属性指令上尝试了相同的方法,但得到了一个错误。有没有办法升级属性指令?

下面是我升级属性指令的尝试:

[绿色.js]

angular.module('app.components.directives.makeGreen', [])
.directive('makeGreen', function() {
  return {
    restrict: 'A',
    link: function(scope, element) {
      console.log("in makeGreen", scope)
      console.log("element", element)
      element.css('color', 'green');
    }
  };
});

[makeGreen.ts]

import { Directive, ElementRef, Injector, Input, Output, EventEmitter } from '@angular/core';
import { UpgradeComponent } from '@angular/upgrade/static';

@Directive({
  selector: '[makeGreen]'
})
export class MakeGreenDirective extends UpgradeComponent {
  @Input() count: number;
  @Output() clicked: EventEmitter<number>;

  constructor(elementRef: ElementRef, injector: Injector) {
    console.log("elementRef", elementRef.nativeElement)
    super('makeGreen', elementRef, injector);
  }
}

当加载一个页面时,我得到一个类似如下的错误:

<div makeGreen>Text should be green</div>

我得到了这个错误:

Error: Directive 'makeGreen' is not a component, it is missing template.

共有1个答案

崔涵亮
2023-03-14

一个 Attribute 指令完全可以具有 Input 属性,该属性可以从使用它的标记传递给它:对于 ex:

<p highlightThis [highlightColor]="'orange'" [count]="5">Highlighted in orange</p>

还要确保appModule/SharedModule导入它。

所以我认为问题在于你定义结构指令的方式。结构指令没有附加任何模板结构。它适用于任何使用它的html标签。

对于您的情况,我看到您正在使用组件类扩展指令,这对于属性指令是不可接受的:--

MakeGreenDirective extends UpgradeComponent {

您应该将属性指令与任何组件分开。例如:

  import { Directive, ElementRef, Injector, Input, Output, EventEmitter } from 
  '@angular/core';

  @Directive({
    selector: '[highlightThis]'
   })

 export class HighLightThisDirective {
 @Input() count: number;
 @Input() highlightColor: string;
 @Output() clicked: EventEmitter<number>;

 constructor(private elementRef: ElementRef, injector: Injector) {  }

 ngOnInit(): void {
   this.decorateMyTag();
 }

 private decorateMyTag(): void {
   console.log("highlightColor", this.highlightColor);
   this.elementRef.nativeElement.style.backgroundColor = this.highlightColor;
  }
}
 类似资料:
  • 问题内容: 我有一个为Python 2.5创建的virtualenv,想将其“升级”到Python 2.6。 最初是这样设置的: 我现在在同一目录中运行virtualenv进行升级: 即使我也可以指定2.6,默认的python仍然是2.5。有什么办法可以完全 删除 2.5并将’bin / python’指向2.6吗? 问题答案: 您可以使用Python 2.6 virtualenv来“虚拟”现有目

  • 在C/C中,可以对SIMD(如AVX和AVX2)指令使用内部函数。有没有办法在Rust中使用SIMD?

  • 我有int的向量,我需要找到并用特定的值替换一些元素。他们都是一样的 例如:将所有元素的4替换为8。 我正在尝试c中循环中的直接内存访问。但对我来说还是很慢。 更新: 我正在上使用OpenCV对象: 函数仅在释放模式下通过指针返回值

  • 是否可以对域类(而不是域实例)应用ACL权限?我有一个场景,我想为一类用户提供对域对象完全CRUD的一揽子权限,而第二类用户必须有特定的ACL条目才能做到这一点。 当然可以将ACL条目与基于角色的权限混合来实现这一点,但是我觉得有一个更优雅的解决方案,除了实例级别之外,Spring ACL还可以在类级别上工作。 我正在查看微薄的Spring安全ACL留档和这个问题。

  • 我用的是spring 5.3.16,spring boot 2.2.10.RELEASE,spring cloud 2.2.10.RELEASE用的是spring-cloud-网飞-zuul,那么,我可以只升级spring版本到5.3.18,而不升级其他框架吗?

  • 假设我想 通过克隆备份env, 然后将env的Python版本从3.7. x升级到3.10. x。 有可能吗?如果是,我应该如何进行?