You could always namespace your scopes.
E.g.
$scope.outer_ctrl = {};
$scope.outer_ctrl.customerName = "bob";
...
$scope.inner_crtl = {};

Aleck


On May 1, 2014, at 2:43 AM, Matthew Simpson <[email protected]>
wrote:

Hi Aleck, thanks for commenting. You're quite right about needing proper
tests of course, but the inherited baggage still annoys me. And I think it
makes the tests less reliable, because the scope in the tests will be
subtly different from the scope in use - I would like to have *total*
control of my scope so I know that my tests and my app are both using the
controller in a precisely identical context.

Having said that, I'm definitely open to the possibility that it's more
bother than it's worth. At this point I really just want to know if it can
be done :)

On Thursday, 1 May 2014 06:58:15 UTC+1, Aleck Landgraf wrote:
>
> Hi Matthew,
>
> I agree with Sander and would add that some basic controller test coverage
> for your inner controller should verify that you misnamed a variable.
>
>     function create_inner_controller(){
>         inner_controller = controller('inner_controller', {
>             $scope: inner_controller_scope,
>             CurrentUser: 'test user'
>         });
>     }
>     it("should have a proper scope variable name", function() {
>         // arrange
>         create_inner_controller();
>
>         // act
>         inner_controller_scope.$digest();
>
>         // assertions
>         expect(inner_controller_scope.currentUser).toBe('test user');
>     });
>
> -Aleck
>
> On Wednesday, April 30, 2014 2:10:48 AM UTC-7, Matthew Simpson wrote:
>>
>> I am currently refactoring a large-ish angular app in an attempt to DRY
>> up the code and slim down some very fat controllers. I have moved almost
>> all my API access into services and it's working very well for me, but
>> something has popped up which is really bothering me.
>>
>> Essentially, I now have no use for scope inheritance in my controllers
>> whatsoever. All my dependencies are injected, I never use anything from the
>> parent scope. Furthermore, any data I want exposed to my views I explicitly
>> attach to the scope for that controller, because I think it's clearer, more
>> declarative, more testable etc. At the same time, I am aware that a lot of
>> the time the scope will already contain that data because there are certain
>> things I attach to the scope all over the place, e.g. currentUser. I would
>> rather that the scope was not inherited from the enclosing scope, because
>> it's simpler to test & reason about my controllers if I know I'm getting a
>> blank-slate scope every time.
>>
>> Here's an illustration of what's bothering me:
>>
>> http://plnkr.co/edit/4yJ8KYfcdazIkyHNQaFp?p=preview
>>
>> As you can see, there are two controllers, one inside the other. Each has
>> its dependencies injected and attaches them to the scope for use by the
>> view. They're completely encapsulated. And it works fine. Except, look at
>> the inner controller! I've misspelt the name of my scope property, so the
>> view shouldn't show anything! But of course it does show something, because
>> the currentUser scope property is inherited from the enclosing view. This
>> bugs me.
>>
>> I've actually tried to write an alternative version of ngController that
>> uses an isolate scope, but I can't get it to work (for some reason angular
>> doesn't attach the scope to the view).
>>
>> My questions are:
>>
>> 1. Is there an easy way to get an isolate scope in my controllers?
>> 2. Is there a complicated/clever way to get an isolate scope in my
>> controllers?
>> 3. Should I just replace all my controllers with directives? (I don't
>> want to do this)
>> 4. Should I just use the "Controller as" syntax? (I don't want to do this
>> either)
>> 5. Should I just forget about this and get on with my life?
>>
>> Thanks for reading this long and waffly post.
>>
>  --
You received this message because you are subscribed to a topic in the
Google Groups "AngularJS" group.
To unsubscribe from this topic, visit
https://groups.google.com/d/topic/angular/b1EoEB9Bj1w/unsubscribe.
To unsubscribe from this group and all its topics, send an email to
[email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.

Reply via email to