I am confused. My understanding is that in an angular Controller 'this'
refers to the controller context itself like any other constructor function
where '$scope' is current angularjs $scope/view object. They are not the
same thing. If you define a function on 'this' and a function on '$scope'
the latter can be seen by your html but not the former. With the
ridiculous javascript non-lexical exceptions on 'this' mixed in it makes
for quite a confusion-party. Then toss in that child scopes get created
fairly often where your constructor 'this' is not changing across these
sub-scopes. And then there are directives. This stuff is as clear as mud.
It really needs to be cleaned up.
On Monday, March 10, 2014 12:44:28 PM UTC-7, Artem Saveliev wrote:
>
> Comment on actual development - Angular UI's ngGrid uses string reference
> to data variable. They allow the use of both object reference and string
> name, but string name is the only one that supports data updates.
> The reason is that they use $watch to watch the data.
>
> I just found that I can't cleanly use "controller as" together with ngGrid
> for that reason - my controller doesn't know what name to pass to ngGrid,
> as it doesn't know it's own name. There are several workarounds that I am
> considering, but in general this will be an issue as you can't cleanly
> watch the content of the controller. I really need to know the string name
> of the controller at the time of construction for a simple solution.
>
>
>
> On Thursday, February 20, 2014 5:02:00 PM UTC-5, Кошелев Иван wrote:
>>
>> >>$scope.$watch('controller.varname', ...)
>> Valid point. But in development I'm yet to encounter a situation where
>> this would pose a problem. A lot more often I’m found in a situation where
>> controller A uses a variable on the scope that it did not define and I am
>> forced to go look for its defining controller by simple text search for
>> its name.
>>
>> Plus, if you have a variable that will be used somewhere down the scope
>> inheritance chain, it is already a good practice to declare it on an object
>> attached to a scope as opposed to the scope itself, to avoid accidental
>> overshadowing if you write into it.
>>
>>
>>
>> *From:* Guillaume Lecomte
>> *Sent:* Thursday, February 20, 2014 23:16
>> *To:* [email protected]
>>
>> Sorry to bring that back but am I the only one who see a design problem
>> here?
>> We define an alias in the view/template ( MyCtrl as controller ), if we
>> want to watch a variable in the (controller) scope from the controller, we
>> need to know the alias we defined in the template
>> ($scope.$watch('controller.varname', ...),
>> it's not DRY, it generates coupling and prevent reusing several times the
>> same controller (nested).
>>
>> I'm suggesting a $controllerScope injectable (a $scope 'scoped' on the
>> controller) to solve that, does anyone else want something like that?
>>
>> Le vendredi 14 juin 2013 21:19:12 UTC+2, Guillaume Lecomte a écrit :
>>>
>>> Doesn't that feature need a way to inject a controllerScope in the
>>> controller (a scope where this is the controller) to be able to watch
>>> members agnosticly of the alias defined in the view to be complete? Or
>>> provdide a way to mixin that scope in the controller?
>>
>> --
>> 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/84selECbp1I/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/groups/opt_out.
>>
>
--
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.