Używam Angularjs i Używaj i chciałbym rozszerzyć obiekt kątowy za pomocą funkcji niestandardowej:
angular.executeAfterDigest(function(){...});
Jak się poruszyć i rób to? Podejrzewam, że muszę jakoś przedłużyć Iangularettic lub czy mogę używać czegoś takiego jak kątowy.Prototyp? (Nie jestem bardzo doświadczony z rozszerzeniem obiektu JavaScript, aby rozpocząć).
Może to bardziej właściwe, aby stworzyć "angularhelperservice", który zamiast tego wstrzyknął.
3 odpowiedzi
Wystarczy powiedzieć maszynozistomieniu na nim, dodając do interfejsu: HTTPS: //Github.com/borisyankov/definitelytyped/Blob/master/angularjs/angular.d.ts#l9.
declare module ng {
interface IAngularStatic {
executeAfterDigest:Function;
}
}
Aktualizacja
Wolałbym nie zmieniać kątnionej.d.ts, ponieważ jest to komponent strony trzeciej
Nie umieścisz tego w angular.d.ts
. Włożyłbyś to w swoim globals.d.ts
(lub vendor.d.ts
), aby udokumentować, w jaki sposób dostosowujesz biblioteki dostawcy (tutaj kątowe), używasz w projekcie Twój .
Pamiętaj: Interfejsy są otwarte zakończone .
Aktualizacja aktualnego stanu rzeczy:
Basarat Odpowiedź nie działa dla mnie i złamała Iangularystatyczne wpisanie w mojej aplikacji, ale dodanie tego do moich global.d.ts Naprawiono niestandardowy problem z rozszerzeniem kątowym problemem:
declare namespace angular {
interface IAngularStatic {
copyData:Function;
}
}
Pochodzę declare module ng
do declare namespace angular
Zmiana z zdecydowanie wpisana struktura powiązana przez Basarat : https://github.com/borisyankov/definitelytyped/Blob /master/angularjs/angular.d.ts#l9.
Ponieważ kanciasty jest instancją Singleton, możesz po prostu zrobić:
angular.executeAfterDigest = function(fn) {
setTimeout(fn,0);
}
Kiedy go nazywasz, nie gwarantuje się wykonywania po strawie. Musisz upewnić się, że nazywany jest tylko kiedy $scope.$$phase
jest $digest
lub $apply
. Zasadniczo będzie działać tylko wtedy, gdy jesteś w świecie kątowym.