【问题标题】:How do I add properties to ng.Iscope?如何向 ng.Iscope 添加属性?
【发布时间】:2017-07-15 21:55:15
【问题描述】:

我正在访问这样的范围:

  let element = angular.element(document.getElementsByClassName('active'));
  let scope = element.scope();

当我执行 a 时,我的范围对象看起来像这样

console.log(scope);

$id:2017 $parent:ChildScope $root:Scope __private__:Object index:0 match:Object __proto__:Object

但是当我尝试这样做时:

console.log(scope.match);

Typescript 给出语法错误:

(27,34):错误 TS2339:“IScope”类型上不存在属性“匹配”。

并打印出 scope.$id 工作

console.log(scope.$id);

我知道在文档中定义了 $id 以便工作。 http://definitelytyped.org/docs/angularjs--angular-route/interfaces/ng.iscope.html

如何打印出我的成员变量 scope.match 而不会出现 Typescript 错误?我想我需要扩展 ng.IScope?

【问题讨论】:

  • 听起来在控制台日志时属性match 没有添加到范围中。你能添加一个最小的工作示例吗?
  • 是否可以检查范围属性? if (scope.match == null) 因错误 TS2339 而无法工作。
  • 您始终可以使用if (angular.isUndefined(scope.match)),但您应该真正弄清楚为什么要尝试访问尚未存在的属性。
  • 我尝试了isUndefined(),但我在执行scope.match时遇到了同样的错误
  • 再一次,如果我没有可以重现您的问题的示例,我真的无法为您提供帮助..

标签: javascript angularjs typescript


【解决方案1】:

我能够通过导出接口然后强制转换 ng.IScope 来解决问题。

确保使用 ? 使其成为可选参数。那是我出错的地方

export interface IMyScope extends ng.IScope {
  match?: any;
}

然后:

let myScope = <IMyScope>element.scope();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 2010-11-21
    • 2020-10-13
    • 2017-03-18
    相关资源
    最近更新 更多