【问题标题】:How to do Radio button Accordion in Angular.js如何在Angular.js中做单选按钮手风琴
【发布时间】:2016-08-22 14:20:53
【问题描述】:

当我单击单选按钮时,我想这样做,手风琴将打开,否则它将始终关闭。我尝试过类似下面的方法,

wishlist.html

<form name="createWishListForm">
    <md-toolbar class="md-accent md-hue-2">
        <div class="md-toolbar-tools" layout="row" layout-align="space-between center">
            <span class="title">Create a List</span>
            <md-button class="md-icon-button" ng-click="cancel()" aria-label="Close dialog">
                <md-icon md-font-icon="icon-close"></md-icon>
            </md-button>
        </div>
    </md-toolbar>

    <md-dialog-content>
        <md-input-container style="width:300px">
            <label>Wish List name</label>
            <input ng-model="vm.createWishListForm.name" name="name" required="true">
            <div ng-messages="createWishListForm.name.$error" ng-show="createWishListForm.name.$touched">
                <div ng-message="required">This field is required</div>
            </div>
        </md-input-container>

        <md-input-container>
            <md-radio-group ng-model="vm.createWishListForm.wishListType">
                <md-radio-button value="Public">Public</md-radio-button>
                <md-radio-button value="Shared">Shared</md-radio-button>
                    <div class="friendsList"  flex style="width:300px; margin-left:60px">
                        <md-list ng-cloak>
                            <md-list-item ng-repeat="contact in contacts">
                                <md-checkbox class="md-secondary" ng-model="contact.selected" value={{friend.email}}></md-checkbox>
                                <p> {{ contact.name }} </p>
                            </md-list-item>
                        </md-list>
                    </div>
                <md-radio-button value="Private">Private</md-radio-button>
            </md-radio-group>
        </md-input-container>
    </md-dialog-content>



     <div class="md-actions" layout="row" layout-align="space-between center">
        <div layout="row" layout-align="start center">
            <md-button ng-click="cancel()" class="send-button md-accent md-raised" aria-label="Cancel">Cancel</md-button>
            <md-button ng-click="createWishListForm.$valid && create(vm.createWishListForm)" class="send-button md-accent md-raised" aria-label="Create">Create a Wish List</md-button>
        </div>
    </div>
</form>

wishlistController.js

function WishListController($http, $location, $localStorage, $scope, $rootScope, $mdDialog, $document, $window)
{
    var vm = this;
    vm.uid = $localStorage._id;
    //console.log(vm.uid);

    $http({
            url:'http://192.168.2.8:7200/api/importContacts',
            method:'POST',
            data: {uId : vm.uid}
        }).then(function(res){
            //console.log(res.data.result);
            if(res.data.result === null || res.data.result.contacts === null){
                 console.log("no results");
            }else{
                vm.contacts = res.data.result.contacts;
                //console.log(vm.contacts);
            }
        }, function(error){
            alert(error.data);
        });

    vm.creatListDialog = function (ev){
        vm.name = $localStorage.name;
        $mdDialog.show({
            controller         : vm.CreateWishListDialogController,
            controllerAs       : 'vm',  
            locals             : {
                item: vm.contacts
            },
            templateUrl        : 'app/main/apps/wishlist/create-wishlist.html',
            parent             : angular.element($document.body),
            targetEvent        : ev,
            clickOutsideToClose: true,
        })
        .then(function(userData) {
            refresh();
             vm.status = '' + userData.name + 's Wish List ' + userData.wishListType + '.';
        }, function() {
            vm.status = 'You cancelled the dialog.';
        });
    };

    vm.CreateWishListDialogController = function($scope, $mdDialog, item){
        $scope.hide = function() {
            $mdDialog.hide();
        };
        $scope.cancel = function() {
            $mdDialog.cancel();
        };

        $scope.contacts = item;

        //$scope.type = 'Shared';

        $scope.create = function(userData) {
            //console.log(userData);
            $http({
                url: 'http://192.168.2.8:7200/api/creatList',
                method: 'POST',
                data: {wData:userData, uId:vm.uid}
            }).success(function(res) {
                console.log("success");
            }, function(error) {
                console.log(error);
                alert('here');
            });

            $mdDialog.hide(userData);
        };
    }
 }

上图说明了一切。当我点击共享单选按钮时,只有friendsList div会打开,否则它总是被关闭。如何做到这一点,请帮助我。

【问题讨论】:

    标签: angularjs html sass angular-material


    【解决方案1】:

    尝试为单选按钮分配模型,然后相应地切换好友容器的可见性:

     <md-input-container>
            <md-radio-group  ng-model="vm.createWishListForm.wishListType">
                <md-radio-button value="Public">Public</md-radio-button>
                <md-radio-button  value="Shared">Shared</md-radio-button>
                    <div class="friendsList" ng-hide="vm.createWishListForm.wishListType !== 'Shared'"  flex style="width:300px; margin-left:60px">
                        <md-list ng-cloak>
                            <md-list-item ng-repeat="contact in contacts">
                                <md-checkbox class="md-secondary" ng-model="contact.selected" value={{friend.email}}></md-checkbox>
                                <p> {{ contact.name }} </p>
                            </md-list-item>
                        </md-list>
                    </div>
                <md-radio-button  value="Private">Private</md-radio-button>
            </md-radio-group>
        </md-input-container>
    

    【讨论】:

    • @Kevin - 已更新。错过了您正在使用 md-radio-button
    • 它也不起作用,因为表单中存在单选按钮。在我点击CREATA A WISHLIST 按钮之后,只有它会进入控制器,然后type 才会设置。
    • 我在那里面临另一个问题。也就是说,md-radio-group 有一个 ng-model,它将进入控制器,在 md-radio-group 内部,我有 md-checkbox,其中也包含 ng-model。如何将此模型发送到控制器
    • 你真的需要 ng-model 来做 md-checkbox 吗?这就是您在 md-radio-group ng-model 中获得的确切值。
    • 您可以循环访问“联系人”并选择具有选定属性的联系人。或者类似 var selectedContacts = $.grep($scope.contacts, function (e) { return e.selected === true });
    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 2021-08-09
    • 2018-07-30
    • 2015-09-20
    • 2013-08-09
    • 1970-01-01
    • 2017-07-03
    • 2013-05-16
    相关资源
    最近更新 更多