Glad this helps, apologies for not posting in SO earlier, got a little busy.
On Sat, Apr 5, 2014 at 7:35 AM, Rob Munro < [email protected]> wrote: > yep that got it - thanks very much. > > I am *loving* this Angular stuff - totally brilliant. > > thanks agin > best rob > > > On Friday, 4 April 2014 16:16:44 UTC+1, William Szeliga wrote: > >> I think this may be an inheritance problem again. Check out the >> Inheritance article here: https://github.com/angular/ >> angular.js/wiki/Understanding-Scopes. Hopefully this will be of some >> help. I THINK this may come down to putting the things you want to watch >> inside of an object (instead of $scope.position, do >> $scope.someClevelModelName.position) and watch THAT property instead of >> the position property of the outer scope. >> >> Really hope this helps. >> >> -Bill >> >> >> On Fri, Apr 4, 2014 at 8:47 AM, Rob Munro >> <[email protected]>wrote: >> >>> I have an audio player and am using this range slider - which works >>> quite well.https://github.com/danielcrisp/angular- >>> rangeslider/blob/master/angular.rangeSlider.js >>> >>> <li ng-controller="PlayerCtrl" style="display:inline-block;"> >>> ... <span range-slider min="0" max="100" ng-controller="PositionCtrl" >>> model-max="position" pin-handle="min" filter="positionSilderText"> >>> ...</li> >>> >>> So I make a new Controller PositionCtrl inside the PlayerCtrl like so: >>> >>> angular.module('myApp.controllers', []).controller('PlayerCtrl', >>> ['$scope','$timeout',function($scope,$timeout) { >>> $scope.audioTag=document.getElementById('audioPlayer');// an >>> <audio/> tag >>> $scope.position = 0; >>> $scope.PositionCtrl = function ($scope) { >>> $scope.$watch('position', function() { >>> if ($scope.audioTag.duration) { >>> $scope.audioTag.currentTime = >>> $scope.audioTag.duration * $scope.position / 100.0; >>> } >>> }); >>> }; >>> ... >>> $scope.ui=function() {//called by a $timeout >>> ... >>> var newpos = $scope.audioTag.duration; >>> $scope.position = setpos; >>> // $scope.$$childHead.position = setpos;// <<-- dont want to >>> do this >>> .... >>> } >>> }); >>> >>> So initially the ui() function updates my slider pos using >>> $scope.position and all good. >>> >>> My problem is that once i drag the slider the position variable gets >>> created in the child(PositionCtrl) scope and so the watch no longer finds >>> the variable in the parent(PlayerCtrl) scope. Hence the slider no longer >>> updates from the ui() method. >>> >>> If i uncomment the line to assign the $$childHead.position then the >>> watcher works . But its no good as i might add more children later and >>> AFAIK you can't access child scope from the parent anyways (not sure why). >>> >>> What is the correct way to share the position with both scopes? >>> >>> I asked this >>> here<http://stackoverflow.com/questions/22845421/how-to-share-a-scope-variable-with-a-child-scope/22846478?noredirect=1>- >>> but didn't get any answers - that worked. >>> >>> -- >>> 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. > -- 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.
