Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I\'m trying to make a service that\'s polymorphic based upon what mode is specif

ID: 648195 • Letter: I

Question

I'm trying to make a service that's polymorphic based upon what mode is specified in the URL. If the char param in the route is set to 'p', I want to use a PresentMode service. If the char param is set to 'n', I want to use a NoteMode service. Each of these present the same interface, but I want to choose one at a time.

So far the best solution I've come up with is something like this:

var mod = angular.module('modeModule', []);

mod.service('modeService', function($routeParams, presentMode, noteMode) {
if ($routeParams.char === 'p') {
    this.mode = presentMode;
} else if ($routeParams.char === 'n') {
    this.mode = noteMode;
}
}

mod.service('presentMode', function() {});
mod.service('noteMode', function() {});
This works, but it requires that I append .mode to the end of every access (eg modeService.mode.blah(). Is there a better way to do this?

Explanation / Answer

I don't understand what you'd like to have happen. You'll get a lot more traction on this question on the regular stackoverflow.

There's a lot of different styles to go about this. Personally, I keep my services clear of logic and just use them to wrangle data and as a central api. in my controllers, those data and api methods get scoped to the view. When I need to do some logic on the data or method, I'll use an angular decorator or filter.

To sum up my way, Services - data and methods Controllers - $scopes and $watchers (this is where you can set $scope.exMethod = exService.exMethod() and then just call exMethod() in your html) Filters / Decorators - business logic (put your if logics here)