نحوه ایجاد تب های داینامیک با استفاده از AngularJS در MVC

یکشنبه 23 اسفند 1394

در این مقاله قصد داریم با استفاده از AngularJS بر برنامه خود در MVC تب های داینامیک را ایجاد کنیم. در AngularJS یک کنترل tab وجود دارد. در اینجا خواهیم دید این تب ها چگونه می توانند با داده های داینامیک ایجاد شوند .

نحوه ایجاد تب های داینامیک با استفاده از AngularJS در MVC

همانطور که همه مطلع هستید در  AngularJS یک کنترل tab وجود دارد. در اینجا خواهیم دید این تب ها چگونه می توانند با داده های داینامیک و واکشی آنها از دیتابیس ایجاد شوند.

در ابتدا یک بر نامه MVC ایجاد کرده و AngularJS را از طریق  NuGet به آن می افزاییم. می توانیم فایلهای  CSS و  Script جدید را پس از نصب آن ببینیم.

یک کنترلر ایجاد میکنیم ، در اینجا کنترلری با نام  Home ایجاد کردیم. در آن یک مدل را فراخوانی میکنیم که داده های داینامیک را باز می گرداند.

    public class HomeController: Controller  
    {  
        //  
        // GET: /Home/  
        public ActionResult Index()  
        {  
            return View();  
        }  
        public JsonResult TabData()   
        {  
            Test t = new Test();  
            var myList = t.GetData();  
            return Json(myList, JsonRequestBehavior.AllowGet);  
        }  
    }  

یک  ActionResult و یک  JsonResult داریم که سرویس  AngularJS را فراخوانی خواهد کرد. در این کنترلر نمونه ای از مدل با نام  Test  را ایجاد کردیم . اکنون به سراغ ایجاد کردن آن مدل می رویم.

مدلی با نام  Test  ایجاد میکنیم. بعضی داده های داینامیک را با استفاده از loop و انتساب مقادیر به یک لیست ایجاد میکنیم.

public class Test  
    {  
        public List < Customer > GetData()  
        {  
            try  
            {  
                List < Customer > cst = new List < Customer > ();  
                for (int i = 0; i < 15; i++)  
                {  
                    Customer c = new Customer();  
                    c.CustomerID = i;  
                    c.CustomerCode = "CST" + i;  
                    cst.Add(c);  
                }  
                return cst;  
            } catch (Exception)  
            {  
                throw new NotImplementedException();  
            }  
        }  
    }  
    public class Customer  
    {  
        public int CustomerID  
        {  
            get;  
            set;  
        }  
        public string CustomerCode  
        {  
            get;  
            set;  
        }  
    }  

همانطور که میبینید لیستی از انواع  Customer  را ایجاد کردیم. 

در کنترلر با کلیک راست بر روی متد ،  View  مربوط به  index را ایجاد میکنیم. برای نمایش تب ها  در آن ، کدها به صورت زیر خواهند بود.

<div ng-controller="tabController" class="sample tabsdemoDynamicTabs" layout="column" ng-cloak="" ng-app="tab">
    <md-content class="md-padding">
    <md-tabs md-selected="selectedIndex" md-border-bottom="" md-autoselect="">
      <md-tab ng-repeat="tab in tabs" ng-disabled="tab.disabled" label="{{tab.title}}">
        <div class="demo-tab tab{{$index}}" style="padding: 25px; text-align: center;">
          <div ng-bind="tab.content"></div>
          <br>
          <md-button class="md-primary md-raised" ng-click="removeTab( tab )" ng-disabled="tabs.length <= 1">حذف تب</md-button>
        </div>
      </md-tab>
    </md-tabs>
  </md-content>
    <form ng-submit="addTab(tTitle,tContent)" layout="column" class="md-padding" style="padding-top: 0;">
        <div layout="row" layout-sm="column">
            <div flex="" style="position: relative;">
                <h2 class="md-subhead" style="position: absolute; bottom: 0; left: 0; margin: 0; font-weight: 500; text-transform: uppercase; line-height: 35px; white-space: nowrap;">ایجاد تب جدید</h2>
            </div>
            <md-input-container>
        <label for="label">تیتر</label>
        <input type="text" id="label" ng-model="tTitle">
      </md-input-container>
            <md-input-container>
        <label for="content">محتوا</label>
        <input type="text" id="content" ng-model="tContent">
      </md-input-container>
            <md-button class="add-tab md-primary md-raised" ng-disabled="!tTitle || !tContent" type="submit" style="margin-right: 0;">افزودن تب</md-button>
        </div>
    </form>
</div>

همانطور که میبینید کنترلر  AngularJS و app name را به صورت زیر تعریف کردیم.

ng-controller="tabController" class="sample tabsdemoDynamicTabs" layout="column" ng-cloak="" ng-app="tab" 

به منابع در  View  خود نیاز داریم.

    <link href="~/CSS/angular-material.css" rel="stylesheet" />  
    <link href="~/CSS/docs.css" rel="stylesheet" />  

استایل های زیر را برای تب ها به  View  اضافه میکنیم.

    <style>  
        .tabsdemoDynamicTabs md-content  
        {  
            background-color: transparent !important;  
        }  
          
        .tabsdemoDynamicTabs md-content md-tabs  
        {  
            border: 1px solid #e1e1e1;  
        }  
          
        .tabsdemoDynamicTabs md-content md-tabs md-tab-content   
        {  
            background: #f6f6f6;  
        }  
          
        .tabsdemoDynamicTabs md-content md-tabs md-tabs-wrapper  
        {  
            background: white;  
        }  
          
        .tabsdemoDynamicTabs md-content h1:first-child  
        {  
            margin-top: 0;  
        }  
          
        .tabsdemoDynamicTabs md-input-container  
        {  
            padding-bottom: 0;  
        }  
          
        .tabsdemoDynamicTabs .remove-tab  
        {  
            margin-bottom: 40px;  
        }  
          
        .tabsdemoDynamicTabs .demo-tab > div > div  
        {  
            padding: 25px;  
            box-sizing: border-box;  
        }  
          
        .tabsdemoDynamicTabs .edit-form input  
        {  
            width: 100%;  
        }  
          
        .tabsdemoDynamicTabs md-tabs  
        {  
            border-bottom: 1px solid rgba(0, 0, 0, 0.12);  
        }  
          
        .tabsdemoDynamicTabs md-tab[disabled]   
        {  
            opacity: 0.5;  
        }  
          
        .tabsdemoDynamicTabs label  
        {  
            text-align: left;  
        }  
          
        .tabsdemoDynamicTabs .long > input  
        {  
            width: 264px;  
        }  
          
        .tabsdemoDynamicTabs .md-button.add-tab  
        {  
            transform: translateY(5px);  
        }  
    </style>  

منابع  JS را نیز اضافه میکنیم.

    <script src="~/Scripts/angular.min.js"></script>  
    <script src="~/Scripts/angular-animate.min.js"></script>  
    <script src="~/Scripts/angular-route.js"></script>  
    <script src="~/Scripts/angular-aria.min.js"></script>  
    <script src="~/Scripts/angular-messages.min.js"></script>  
    <script src="~/Scripts/svg-assets-cache.js"></script>  
    <script src="~/Scripts/angular-material.js"></script>  
    <script src="~/Scripts/Module.js"></script>  

در اینجا  Module.js  فایلی است که کنترلر  AngularJS ،  Service  و  App را ایجاد خواهیم کرد. کدها به صورت زیر می باشند :

    (function()  
     {  
        'use strict';  
        var app;  
        (function()  
         {  
            //create app  
            app = angular.module("tab", ['ngMaterial', 'ngMessages', 'material.svgAssetsCache']);  
            //create controller  
            app.controller('tabController', function($scope, tabService)   
            {  
                var serv = tabService.getAll();  
                serv.then(function(d)  
                {  
                    tabController(d.data, $scope);  
                }, function(error)  
                {  
                    console.log('اشکالی پیش آمده است. لطفا بعد از دقایقی دوباره امتحان کنید.');  
                })  
            });  
            //create service  
            app.service('tabService', function($http)  
            {  
                this.getAll = function()  
                {  
                    return $http  
                    ({  
                        url: "/Home/TabData", //Here we are calling our controller JSON action  
                        method: "GET"  
                    });  
                };  
            });  
        })();  
    })();  

همانطور که میبینید داده ها را از سرویس  AngularJS برای کنترلر دریافت میکنیم. داده را به یک تابع با نام tabController ارسال میکنیم. در زیر کدهای این تابع را میبینید.

 function tabController(data, $scope) {
        var tabsArray = [];
        for (var i = 0; i < data.length; i++) {
            tabsArray.push(
                {
                    'title':data[i].CustomerID+"کد مشتری  ",
                    'content': data[i].CustomerCode + " اطلاعاتی که مشاده میکنید برای مشتری با کد  " 
                });
        }
        var tabs = tabsArray,
            selected = null,
            previous = null;
        $scope.tabs = tabs;
        $scope.selectedIndex = 0;
        $scope.$watch('selectedIndex', function (current, old) {
            previous = selected;
            selected = tabs[current];
        });
        $scope.addTab = function (title, view) {
            view = view || title + " Content View";
            tabs.push({ title: title, content: view, disabled: false });
        };
        $scope.removeTab = function (tab) {
            var index = tabs.indexOf(tab);
            tabs.splice(index, 1);
        };
    }
})();

به این صورت توانستیم با استفاده از  AngularJS تب های داینامیکی را ایجاد کنیم که می توان آنها را حذف یا اضافه کرد. خروجی به صورت زیر است :

آموزش angular

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید