1. 程式人生 > >使用angular進行批量刪除+跨域

使用angular進行批量刪除+跨域

目錄

筆者在實際開發中,遇到需要使用angularjs進行批量選中,批量刪除的需要,又不想使用jquery,所以只好各種百度,同時每次都修改一點js或者html程式碼就得重啟伺服器(可能有 更好的啟動方式),太麻煩,所以,索性將前端的html靜態程式碼全部抽離出來,這時又遇到了 跨域的問題,所以只好又百度一下跨域問題,比想象中簡單能解決。

首先是前端程式碼:

<meta charset="utf-8" />
    <title>demo</title>   <!--title 編碼-->
    <meta http-equiv="Access-Control-Allow-Origin"
content="*">
<script src="vendor/jquery/jquery.min.js"></script> <script src="vendor/angular/angular.js"></script> <script src="check.js"></script> <!-- 你自己需要寫的js程式碼檔案--> <body ng-app="app"> <div ng-controller="AppCtrl"> <div class="row">
<div class="col-md-6"> <table cellpadding="0" cellspacing="0" border="0" class="datatable table table-hover dataTable"> <thead> <tr> <th><input type="checkbox" ng-click="selectAll($event)" ng-checked
="isSelectedAll()"/>
</th> <th>姓名</th> <th>單位</th> <th>電話</th> <th>操作</th> </tr> </thead> <tbody> <tr ng-repeat="item in content"> <td><input type="checkbox" name="selected" ng-checked="isSelected(item.id)" ng-click="updateSelection($event,item.id)"/></td> <td>
{{item.name}}</td> <td>{{item.age}}</td> <td>{{item.sex}}</td> <td> <button ng-click="isdelete(item.id)">刪除</button></td> </tr> </tbody> </table> <button ng-click="alldelete()">刪除</button></td> </div></div> </div> </body>

js程式碼:check.js

var myapp=angular.module("app",[]);
myapp.controller('AppCtrl',function ($scope,$http) {

    $scope.content=[{
        id:1, // 為方便測試,加入的資料,隨便加的,實際中你從伺服器端取出來的,肯定是要包含 唯一標示列如id這樣的
        name:"tony1",
        age:12,
        sex:1

    },{  id:2,
        name:"tony12222",
        age:14,
        sex:15

    } 
    ];

    //建立變數用來儲存選中結果
    $scope.selected = [];  // 很重要,作為你選取的checkbox的儲存器,
    var updateSelected = function (action, id) {
    // 這個函式主要給 checkbox賦值,選還是不選,操作的是 $scope.selected這個“List”
        if (action == 'add' && $scope.selected.indexOf(id) == -1) $scope.selected.push(id);
        if (action == 'remove' && $scope.selected.indexOf(id) != -1) $scope.selected.splice($scope.selected.indexOf(id), 1);
    };
    //更新某一列資料的選擇
    $scope.updateSelection = function ($event, id) {
        var checkbox = $event.target;
        // 這個意思就是 checkbox 如果選了,那就action='add',方便後續的操作“List”
        var action = (checkbox.checked ? 'add' : 'remove');
        updateSelected(action, id);
    };
    //全選操作  
    $scope.selectAll = function ($event) {
        var checkbox = $event.target;
        var action = (checkbox.checked ? 'add' : 'remove');
        // 就是監控是否全部需要進行選中或者不選中
        for (var i = 0; i < $scope.content.length; i++) {
            var contact = $scope.content[i];
            updateSelected(action, contact.id);
        }
    };
    $scope.isSelected = function (id) {
        return $scope.selected.indexOf(id) >= 0;
    };
    $scope.isSelectedAll = function () {
    // 判斷當前內容是否全部被選中,
        return $scope.selected.length === $scope.content.length;
    };
// 單獨進行某一個的刪除操作,不需要進行前面選中
   $scope.isdelete = function (param) {
       console.log('>>>>'+param);
       $scope.selected.splice($scope.selected.indexOf(param), 1);
       // 還可以進行後續操作,與服務端進行互動
      // 。。。。。。。。
    };

// 進行將選中的刪除
    $scope.alldelete = function () {
        console.log('wait'+$scope.selected);
        var datas=// 傳遞的資料 和格式也是 和服務端進行配合 dataObject
            {dataObject:$scope.selected}
         ;
        $http.post('http://localhost:8080/xxx',
            datas,
            {'Content-Type':'application/x-www-form-urlencoded'}).
            success(function (data, status, header) {
            // 與服務端進行配合的
                  console.log('wait。。。。。。');
               }) ; 
    };


});

服務端程式碼:

  @RequestMapping(value = "/xxx", method = RequestMethod.POST)
    public ResultData getCheckBox( @RequestBody ParamVo pas) {
        ResultData resultData=new ResultData();
        Object o=pas.getDataObject();// ParamVo裡面有屬性叫 dataObject
        List nid=(List)o; //可以直接將其轉化為List
        return resultData;
    }

服務端跨域的配置:

首先是使用了springMVC,可以直接使用 一個springMVC自帶的介面卡,所以只需要寫一個類繼承HandlerInterceptorAdapter就行了,否則就得自己寫攔截器(也可以百度到),如下貼出我的方法:

public class SessionInterceptor extends HandlerInterceptorAdapter{

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST,GET,DELETE,PUT");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
        return true;
    }}