मैं एक आधार सेवा है जो इस तरह दिखता है:AngularJS सेवा विरासत मुद्दों
.service('BaseImageService', ['$q', 'ApiHandler', 'UploadService', function ($q, api, uploadService) {
// Get our api path
var apiPath = 'logos';
// Creates our logo
var _createLogo = function (model) {
// Handle our uploads
return _handleUploads(model).then(function() {
// Create our logo
return api.post(apiPath, model);
});
};
// Edit our logo
var _editLogo = function (model) {
// Handle our uploads
return _handleUploads(model).then(function() {
// Create our logo
return api.put(apiPath, model);
});
};
// Handles our files
var _handleUploads = function (model) {
// Create a promises array
var promises = [];
// Get our file
var file = model.file,
old = model.old;
// If we have a file
if (file) {
// Try to upload the file
promises.push(uploadService.upload(model.file).then(function (response) {
// Update our model
model.path = response.path;
model.thumbnail = response.thumbnail;
}));
// If we have an old model
if (old) {
// Delete both our files
promises.push(uploadService.delete(old.path));
promises.push(uploadService.delete(old.thumbnail));
}
}
// After all promises have completed
return $q.all(promises);
};
// Create our service
var service = {
// Update our api path
updateApiPath: function (path) {
// Set the api path
apiPath = path;
},
// Gets a list of logos
list: function (t) {
if (t) {
console.log(apiPath);
}
// Get our logo
return api.get(apiPath);
},
// Get a single logo
get: function (id) {
// Get our logo
return api.get(apiPath, { id: id });
},
// Create our logo
save: function (model) {
// If we are editing
if (model.id) {
// Edit our logo
return _editLogo(model);
// If we are creating
} else {
// Create our logo
return _createLogo(model);
}
},
// Deletes our logo
delete: function (id) {
// Delete our logo
return api.delete(apiPath, { id: id });
},
// Prepare for editing
prepareForEditing: function (model) {
// Create our old object
model.old = {
path: model.path,
thumbnail: model.thumbnail
};
}
};
// Return our service
return service;
}])
और उसके बाद मैं कुछ सेवाओं है जो "वारिस" इस सेवा, इस तरह:
.service('ImageService', ['BaseImageService', function (baseService) {
// Get our api path
var apiPath = 'images';
// Update the apiPath
baseService.updateApiPath(apiPath);
// Return our service
return baseService;
}])
.service('LogoService', ['BaseImageService', function (baseService) {
// Get our api path
var apiPath = 'logos';
// Update the apiPath
baseService.updateApiPath(apiPath);
// Return our service
return baseService;
}])
.service('PlayerTextService', ['BaseImageService', function (baseService) {
// Get our api path
var apiPath = 'playerText';
// Update the apiPath
baseService.updateApiPath(apiPath);
// Return our service
return baseService;
}])
मैंने सोचा यह ठीक काम कर रहा था। लेकिन मेरे पास यह पृष्ठ है जो अनुक्रमिक रूप से सभी 3 सेवाओं (छवि सेवा, लोगो सेवा और प्लेयरटेक्स्ट सेवा) को कॉल करता है। पृष्ठ के पहले दृश्य पर सब ठीक है, अगर मैं दूर नेविगेट करता हूं और फिर वापस आ जाता है तो छवि सेवा वास्तव में प्लेयर टेक्स्ट सेवा से वापस खींचती है। अब मुझे पता है कि यह सिंगलटन होने की वजह से है, लेकिन मुझे यकीन नहीं है कि मेरी समस्या को कैसे ठीक किया जाए।
क्या कोई मुझे हाथ दे सकता है?
मैं किसी प्रयास किए गए समाधान के साथ एक codepen जोड़ लिया है:
http://codepen.io/r3plica/pen/ONVBJO
प्रयास 2
http://codepen.io/r3plica/pen/jqPeMQ?editors=1010
आप कारखानों का निर्माण कर रहे 'service' और प्रत्येक सेवा baseService वापस नहीं जाना चाहिए। नहीं वास्तव में स्पष्ट आप वास्तविक 'service' जो' का उपयोग कर this' सदस्यों के लिए ... तो वापसी 'अन्य कारखानों आप – charlietfl
Convert आधार करने के लिए कोशिश कर रहे हैं एक उदाहरण के रूप codepen ? – charlietfl
आप संशोधित कर सकते है से नए baseService' एक निर्माता है – r3plica