-
Notifications
You must be signed in to change notification settings - Fork 170
Changes made to one controller be accessible through more than one route.#147
Changes made to one controller be accessible through more than one route. #147mateusmcg wants to merge 2 commits into
Conversation
mateusmcg
commented
Jul 9, 2015
The build failed in these two lines of the utestProvider.js file:
line 73: expect(elem.css("opacity")).toBe("0");
line 77: expect(elem.css("opacity")).toBe("1");
But i don't understand exactly why...
If you could give me a light, i would appreciate.
Thanks.
marcoslin
commented
Jul 14, 2015
The error is due to animation. Could it be that bower.json somehow resolving to Angular 1.4.x? Per #138, angularAMD is having trouble with animation changes in Angular 1.4.x.
mateusmcg
commented
Jul 20, 2015
bower.json is resolving "angular": "^1.3.0", Since this is a separate bug i just commented out these two lines of tests for the build to pass, so if you want you can uncomment them freely.
I don't know if you got a chance to see my changes but they let you load more than one file per page. What do i mean is, if you have a page with its controller, and this page has its own filter/directives/services in separate files, you can load them as well.
Look forward to hear from you.
Thanks.
marcoslin
commented
Jul 22, 2015
I just checked your code and you basically changed load_controller into an array. I am not sure why you need this but let's defer that question for now.
With load_controller as array, you then use the same code:
require(load_controller, function (ctrl) {
defer.resolve(ctrl);
$rootScope.$apply();
});
As result, the code will only resolve the first controller in the array. Is that intentional? If it is, might be worth putting some comment as of why this is ok.
marcoslin
commented
Jul 23, 2015
Is the following question in SO the reason for this change?
mateusmcg
commented
Jul 23, 2015
Actually no, this question in SO is not the reason for the change.
Yes, the code will resolve only the first controller in the array. I'll try to explain better.
Lets supose that we have a specific feature, for example:
- registration-ctrl.js
- registration.html
The code without my changes we evaluate that just fine. But what if the .js file for the controller is not the only file i want to load for this specific page? What if i want to load a filter or a service that are in separate files (registration-filters.js / registration-services.js) but i want to load them together with the controller?
That's why the array, to evaluate all the files that i need, and not only the controller.
Was i a little bit more clear now?
If you got any questions or didn't understand feel free to ask/comment :)
Thanks!
marcoslin
commented
Jul 23, 2015
That is a lot clearer, thanks. I deal with the problem you described by setting the needed dependencies in the registration-ctrl.js file. Can you give me an usage example? We will need to add that README.md.
mateusmcg
commented
Jul 24, 2015
In the project we have here we use it like this:
$routeProvider.when('/myModule/mySubmodule/myFeature2', angularAMD.route({
templateUrl:
factory.getFileVersion('app/myModule/features/mySubmodule/myFeature2/myFeature2.html),
controllerUrl:
[factory.getFileVersion('app/myModule/features/mySubmodule/myFeature2/myFeature2-ctrl.js'), factory.getFileVersion('app/myModule/features/mySubmodule/myFeature2/myFeature2-filter.js'), factory.getFileVersion('app/myModule/features/mySubmodule/myFeature2/myFeature2-directive.js')]
}));
In the controllerUrl we pass the array of files that we want to load for that specific page/controller.
And the getFileVersion function is to translate the url of the .js file (get the current path and name of the file) for production because they are renamed to a hash key to prevent cache.
If you got any questions feel free to ask.
Also lets you load more than one script (directive, filter, controller, services, etc) per route, in case these are in separate files and/or folders.