javascript - Use one md-switch to toggle a group of other md-switchs in HTML/JS -
i wanting able toggle , untoggle entire group sections. when group section toggled off, want sections in group toggle off or disabled. if group section toggled on, want sections toggled on or enabled. added ng-change group toggle function togglelayergroup. have foreach inside function goes through feeds in group. not sure add turn off or on feeds in group.
controller
this feeds loaded up.
// -- load feeds if (service.currentuser.feeds) { var feeds = service.currentuserorg.feeds; angular.foreach(feeds, function(feed, index) { var lg = $scope.layergroups[feed.category]; if(lg) { lg.feeds[feed.id] = feed; lg.feeds[feed.id].layerstate = service.currentuser.mapstate.visiblelayers.indexof(feed.id) >= 0; if (lg.feeds[feed.id].layerstate) { lg.state = true; } } }); } this switches hit.
$scope.layerstate = false; $scope.layergroup = false; $scope.togglelayer = function (layerstate, feed) { if (layerstate) { subscribefeed(feed); if (service.currentuser.mapstate.visiblelayers.indexof(feed.id) < 0) { service.currentuser.mapstate.visiblelayers.push(feed.id); $scope.savestate(); } } else { unsubscribefeed(feed); var index = service.currentuser.mapstate.visiblelayers.indexof(feed.id); if (index >= 0) { service.currentuser.mapstate.visiblelayers.splice(index, 1); $scope.savestate(); } } }; $scope.togglelayergroup = function (layergroupstate, layergroup) { if (!layergroupstate) { angular.foreach(layergroup.feeds, function (feed, index) { subscribefeed(feed); $scope.savestate(); }); } else { angular.foreach(layergroup.feeds, function (feed, index) { unsubscribefeed(feed); $scope.savestate(); }); } }; function subscribefeed(feed) { switch (feed.category) { case 'people': case 'assets': feed._markercoll = {}; feed.processentity = processentity; feed.clearfeed = clearfeed; break; case 'places': feed._placecoll = {}; feed.processentity = processentity; feed.clearfeed = clearfeed; break; } feed.icons = service.currentuser.feedicons; feed.off = nextservice.on(feed.id, function (data) { feed.processentity(data); }); function unsubscribefeed(feed) { feed.off(); delete feed.off; nextservice.emit('unsubscribe', {id: feed.id}); feed.clearfeed(); }
i got work properly. these changes made.
html
<!--layer toggle switch--> <md-switch class="md-primary" ng-model="layergroup.state" ng-change="togglelayergroup(layergroup)" aria-label="{{layergroup.displayname}} toggle switch"></md-switch> <!--layer feeds--> <div ng-repeat="feed in layergroup.feeds" layout="row" layout-align="start center" style="padding: 0 16px;"> <!--feed name--> <p flex class="m2" style="color: #ffffff;" ng-style="{ 'opacity' : layergroup.state ? '1' : '.3' }">{{feed.name}}</p> <!--feed switch--> <md-switch class="md-primary" ng-model="feed.layerstate" ng-disabled="!layergroup.state" ng-change="togglelayer(feed)" aria-label="{{feed.name}} toggle switch"></md-switch> </div> i added ng-style show when feeds disabled. , ng-disabled disable switch when layergroupstate false.
controller
// -- load feeds if (ecosystemservice.currentuserorg.feeds) { var feeds = ecosystemservice.currentuserorg.feeds; angular.foreach(feeds, function(feed, index) { var lg = $scope.layergroups[feed.category]; if(lg) { lg.feeds[feed.id] = feed; lg.feeds[feed.id].layerstate = ecosystemservice.currentuser.mapstate.visiblelayers.indexof(feed.id) >= 0; if (lg.feeds[feed.id].layerstate) { lg.state = true; } } }); } $scope.togglelayergroup = function (layergroup) { if (layergroup.state) { angular.foreach(layergroup.feeds, function (feed) { subscribefeed(feed); if (ecosystemservice.currentuser.mapstate.visiblelayers.indexof(feed.id) < 0) { ecosystemservice.currentuser.mapstate.visiblelayers.push(feed.id); $scope.savestate(); } feed.layerstate = true; }); } else { angular.foreach(layergroup.feeds, function (feed) { unsubscribefeed(feed); var ndex = ecosystemservice.currentuser.mapstate.visiblelayers.indexof(feed.id); if (ndex >= 0) { ecosystemservice.currentuser.mapstate.visiblelayers.splice(ndex, 1); $scope.savestate(); } feed.layerstate = false; }); } }; i added code place feeds loaded , added code in togglelayergroup change layerstate dependending on value of layergroup.
Comments
Post a Comment