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
Kimmen 13 sierpień 2014, 11:04

3 odpowiedzi

Najlepsza odpowiedź

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 .

3
basarat 13 sierpień 2014, 11:15

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.

1
wlechowicz 18 lipiec 2016, 10:20

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.

0
pixelbits 13 sierpień 2014, 07:22