Kısa öykü, özellikle açısal bir uygulamaya açısal olarak yazılmayan bazı veri modeli kodlarını kullanmaya çalışıyorum. Bu kod, modüller için ES6 import/export sözdizimi kullanılarak yazılmıştır ve bunu kullanmaya devam etmek istiyorum. Yani böyle bir şey var:
import angular from 'angular';
export const services = {};
angular.injector(['ng', 'toastr']).invoke([
'$q',
'$http',
'$rootScope',
(
$q,
$http,
$rootScope
) => {
services.$q = $q;
services.$http = $http;
services.$rootScope = $rootScope;
},
]);
Sonra ben sadece içe aktarabilirsiniz: thusly ES6 modül sistemine uygun Açısal (1.5) hizmetlerini sunar bir yardımcı modül oluşturmak oldu Benim yaptığım
export class DataModel {
//some stuff with promises
}
DataModel sınıflarımdaki $ q kütüphanesi ve hey presto, her tür iş var - Söz veriyorum ve .then metotları ateşlendiğinde uygun kapsamlar güncellenmelidir. Sorun şu ki, bu aslında işe yaramıyor olmasıdır. Bunun işe yaramadığının% 90'ından eminim, angular.injector çağrısından aldığım $ rootScope öğesinin, bir tekton köklü değil, sadece bu bağlam için yaratılan yeni ve yeni bir tane olması. Herhangi bir kapsam bağlantısını sayfadaki gerçek kapsamla paylaşmaz (bunu bir DOM öğesi seçerek ve hizmetleri karşılaştırarak doğrulayabilirim. $ RootScope angular.element ($ 0) .scope(). $ Root). Bu nedenle, bir söz bir karar verdiğinde veya $ http iadesi verdiğinde, veriyi alırım ancak arayüzde bir kapsam özetini bildirmeyen standart belirtiler var (hiçbir şeyi elle sindirene kadar hiçbir şey değişmez).
Tek isteğim, etkin sayfada etkin olarak kullanılan $ q, $ rootScope ve $ http hizmetlerinin bir kopyası. Herhangi bir öneri kabul edilir. Bir sonraki denemem, enjektör ile yapmak yerine $ q et al harfini enjekte ettiğim bazı .run bloğundan ilgili hizmetleri alabiliyor muyum? Bu, bazı problemli zamanlama sorunlarını da beraberinde getiriyor, çünkü açılışı önyükleme, çalıştırma bloğunu çalıştırmam ve daha sonra hizmetleri veri modelime göstermem gerekiyor. Ancak önyükleme işlemi, veri modelini gerektirir. Biraz döngüsel.
belki de bir uygulamayı önyükleme yapmalı ve sonra da onun kökünü taşımalısınız. –
Zaten önceden yüklenmiş bir uygulama var, sorun oraya üretilen kök kablosunun, enjektörden el ile rootscope'u çağırdığınızda meydana gelen aynı kök kordonu olmamasıdır.Sürecin üzerine bir çeşit semafor koymam gerektiğini, uygulamanın önyükleme işlemi sırasında uygulamanın gerçek rootScope, q, http ve diğer hizmetlerini almam gerektiğini ve veri modelinin başlangıç sürecini dondurmak/çözmek için semafor kullanmam gerektiğini düşünüyorum. – pfooti