I've tried it with both with no luck. 'Intuitively' I would expect the setter to be called on the controller regardless of @ or = binding, but this doesn't appear to be the case. Thanks! --m
On Tue, Feb 3, 2015 at 1:48 AM, Avi Engelshtein <[email protected]> wrote: > The setter doesn't get called probably because you have defined the 'type' > property as a one way binding with '@' which is just a string passed from > the parent scope to the directive's isolated scope > Change it to '=' to implement a 2 way binding and then the setter will be > called > > > On Monday, February 2, 2015 at 8:21:49 PM UTC+2, Michael Thompson wrote: >> >> All, attempting to use bindToController with Object.defineProperty so I >> can provide a custom setter like this: >> >> (function() { >> >> angular.module('app.directives').directive('appIcon', appIcon); >> >> function appIcon() { >> return { >> restrict: 'E', >> template: '<span ng-class="vm.iconClass"></span>', >> scope: { >> type: '@' >> }, >> controllerAs: 'vm', >> bindToController: true, >> controller: function() { >> var _iconClass; >> var _type; >> >> Object.defineProperty(this, 'type', { >> configurable: false, >> enumerable: true, >> get: function() { >> return _type; >> }, >> set: function(type) { >> _type = type; >> _iconClass = 'icon-' + _type; >> } >> }); >> >> Object.defineProperty(this, 'iconClass', { >> configurable: false, >> enumerable: true, >> get: function() { >> return _iconClass; >> } >> }); >> } >> })(); >> >> Problem is that my setter never seems to get called. The getters are >> called and work just fine. If I flip some logic to just have the iconClass >> getter always compute the _iconClass value this directive works. I'm >> looking to implement something more complicated with multiple properties in >> play though so being able to hook into the setter would be ideal. Will >> that not work with the way that bindToController is implemented? Thanks! >> --m >> >> -- > 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. > -- 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.
