javascript - 解耦按钮(2个按钮同时切换)并根据数据显示适当的按钮

标签 javascript html angularjs

我正在尝试创建一个页面,人们可以在其中注册特定类(class),我能够正确显示,但是在执行 ng-repeat 时,所有注册按钮都会切换,这是不正确的,我也想显示根据我在数据中返回的 ID 选择适当的按钮,例如,registration_id : 1 表示已经注册(这意味着我应该显示取消按钮),registration_id: 2 表示尚未注册(应显示注册按钮)

提前谢谢您 HTML

    <div class="panel-group" id="accordion" role="tablist">
    <section class="panel panel-default">
        <div class="panel-heading" role="tab" id="headingOne">
            <h3 class="panel-title"> Course Information</h3>
            <span class="registerRoaster pull-right" ng-if="register">register</span>
        </div>
        <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
            <div class="panel-body course-info">
            <div class="row">
                <div class="col-xs-6">
                    <lable class="col-xs-6 text-left h5">Course Name:</lable>
                    <span class="col-xs-6 text-center h5">{{course.name}}</span>
                </div>
                <div class="col-xs-6">
                    <lable class="col-xs-6 text-left h5">Points:</lable>
                    <span class="col-xs-6 text-center h5">{{course.points}}</span>
                </div>
            </div>
                <hr/>
            <div class="row">
                <lable class="col-xs-12 pull-left h5"> Description:</lable>
                <div class="col-xs-12">
                    <textarea class="descriptionSize">{{course.description}}</textarea>
                </div>
            </div>
            <div class="row">
                <lable class="col-xs-12 pull-left h5"> Agenda:</lable>
                <div class="col-xs-12">
                    <textarea class="descriptionSize">{{course.agenda}}</textarea>
                </div>
            </div>
                </div>
        </div>
    </section>
</div>
<div class="panel-group" role="tablist">
<section class="panel panel-default">
    <div class="panel-heading" id="headingTwo">
    <h3 class="panel-title"> Available Sessions</h3>
    <hr/>
        </div>
    <div class="panel-body">
    <div ng-repeat="session in course.sessions" class="container">
        <div class="session-item">
            <div class="row">
                <span class="col-xs-12 h5">{{session.session_days[0].start_date | date}}</span>
            </div>
            <div class="row">
                <div class="col-xs-4 session-address h5">
                    {{session.location_name}}
                    <lable class="label">location</lable>
                </div>
                <div class="col-xs-2 session-room h5">
                    {{session.session_days[0].room}}
                    <lable class="label">room number</lable>
                </div>
                <div class="col-xs-2 session-instructor h5">
                    {{session.instructor.name}}
                    <lable class="label">instructor</lable>
                </div>
                <div class="col-xs-3 session-action">
                    <button class="btn btn-primary pull-right" ng-click="toggleRegister(true)" ng-show="!register">Register</button>
                    <button class="btn btn-secondary pull-right" ng-click="toggleRegister(false)" ng-show="register">Cancel</button>
                </div>
            </div>
            <hr/>
        </div>
    </div>
        </div>
</section>
    </div>

JS:--

 angular.module('myApp')
    .controller('RegistrationController', ['$scope', '$state','$http' , function($scope, $state, $http) {
        'use strict';
        $scope.register = false;
        $scope.init = function(){
            $scope.course =    {
                "course_id": 1,
                "name": "Course Name 1",
                "short_name": "coursename1_ILT",
                "description": "desc",
                "agenda": "agenda here",
                "points": 5,
                "status_id": 2,
                "sessions": [
                    {
                        "session_id": 1,
                        "course_id": 1,
                        "status_id": 2,
                        "is_completed": false,
                        "registration": {
                            "registration_id": 1,
                            "registration_type_id": 1
                        },
                        "instructor": {
                            "id": 110,
                            "name": "John Smith"
                        },
                        "session_days": [

                            {
                                "sort_order": 1,
                                "room": "4012V",
                                "duration": 4,
                                "start_date": "2016-11-30"
                            }
                        ],
                        "location_id": 1,
                        "location_name": "ALBANY - A",
                        "max_class_size": 10
                    },
                    {
                        "session_id": 2,
                        "course_id": 2,
                        "status_id": 2,
                        "is_completed": false,
                        "registration": {
                            "registration_id": 2,
                            "registration_type_id": 2
                        },
                        "instructor": {
                            "id": 112,
                            "name": "John Smith"
                        },
                        "session_days": [

                            {
                                "sort_order": 1,
                                "room": "4012V",
                                "duration": 6,
                                "start_date": "2016-12-30"
                            }
                        ],
                        "location_id": 1,
                        "location_name": "ALBANY - A",
                        "max_class_size": 10
                    }]

            };

        };
            $scope.registration = [
                {name: "Registered", id: 1},
                {name: "Not-Registered", id: 2}
            ];
        $scope.toggleRegister = function(status){
            $scope.register = status;
        };
        $scope.init();
    }]
    );

最佳答案

您正在使用寄存器作为全局变量。 您应该将注册的属性重复设置到模型中,或者,如果您想使其保持“全局”,您应该将索引参数添加到toggleRegister函数

$scope.toggleRegister = function(status){
    $scope.register = status;
};

变成了

$scope.toggleRegister = function(status, session_id){
    // 1. find session with given id
    // 2. set status for that session
};

这些按钮会一起切换,因为您只有一个变量来控制所有按钮。

ng-click="toggleRegister(true)" ng-show="!register"

应该是

ng-click="toggleRegister(true, session.session_id)" ng-show="!session.registration.registration_id == 1"

关于javascript - 解耦按钮(2个按钮同时切换)并根据数据显示适当的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37166025/

相关文章:

angularjs - 作为一个团体和单独的 Angular 等待多个 promise ?

javascript - 如何使用 AngularJS 从 DOM 元素的值创建数组?

javascript - 如何点击显示 :none element with puppeteer?

javascript - 使用 anchor 将 href 链接到下一个 div

html - 为什么我的 HTML 页面在 IE7 中有额外的宽度?

javascript - 如何在 Android PhoneGap 应用程序中从 https URI 下载文件?

javascript - XDSoft DateTimePicker 显示不正确

javascript - 在 jQuery 中遍历 HTML DOM 元素

html - 垂直和水平居中 - 响应式

authentication - 如何使用 AngularJS ngView 为未经授权的用户隐藏模板?