我正在使用Angularjs和Typescript,我想用这样的自定义函数扩展角度对象:
angular.executeAfterDigest(function(){...});
我该怎么回事呢?我怀疑我需要以某种方式扩展IAngularStatic或者我可以使用angular.prototype之类的东西吗? (我对扩展javascript对象的开始并不是很有经验)。
创建一个反而注入的“angularHelperService”可能更合适。
答案 0 :(得分:3)
通过添加到界面:https://github.com/borisyankov/DefinitelyTyped/blob/master/angularjs/angular.d.ts#L9
告诉打字稿declare module ng {
interface IAngularStatic {
executeAfterDigest:Function;
}
}
我不想更改angular.d.ts,因为它是第三方组件
你不会把它放在angular.d.ts
中。您可以将其放在globals.d.ts
(或vendor.d.ts
)中,以记录您在 项目中自定义供应商库(此处为角度)的方式。
请记住:接口开放式。
答案 1 :(得分:1)
更新当前状态:
basarat 的答案对我没有用,它在我的应用程序中打破了IAngularStatic键入,但是将其添加到我的global.d.ts中修复了自定义角度扩展功能问题:
declare namespace angular {
interface IAngularStatic {
copyData:Function;
}
}
我从 basarat 链接的绝对类型结构中导出了declare module ng
到declare namespace angular
的变化:
https://github.com/borisyankov/DefinitelyTyped/blob/master/angularjs/angular.d.ts#L9
答案 2 :(得分:0)
由于angular是一个单例实例,你可以这样做:
angular.executeAfterDigest = function(fn) {
setTimeout(fn,0);
}
当您调用它时,无法保证在摘要后执行。您必须确保仅在$scope.$$phase
为$digest
或$apply
时才会调用它。基本上,它只会在你处于棱角分明的世界时起作用。