jquery - angular裡li中按鈕刪除本行?
高洛峰
高洛峰 2017-05-15 17:13:51
0
2
698

//HTML部分

    <p class="btnBox">
        <button class="change" ui-sref="home" ng-click="redact()">编辑</button><br />
    </p>
    <li ng-repeat="(row,value) in data">
        <span id="hid" style="display:inline-block;white-space: nowrap;overflow: hidden;width: 200px;text-overflow: ellipsis;">{{value.content}}</span>
        <button class="showBtn" ng-show="value.show">删除</button class="showBtn" >
        <span>{{value.title}}</span>
    </li>

//js部分
$scope.redact = function() {

            if($(".change").html() == "编辑") {
                $(".change").html("完成")
                angular.forEach(data, function(data) { data.show = true })
                //当删除按钮显示时,实现其删除
                console.log($(".showBtn"))
                //$(".showBtn").onclick = function(){alert(1)}
                //$("li").each = function() {$(".showBtn").onclick = function() { alert(1) }}
                //$(".showBtn").each = function() {$(this).onclick = function() { alert(1) }}
            } else if($(".change").html() == "完成") {
                $(".change").html("编辑")
                angular.forEach(data, function(data) { data.show = false })
            }
        }

為什麼 註解部分無回饋? ?錯了嗎?哪裡錯了?該如何改?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(2)
小葫芦

angular 都是資料驅動模型的,刪除一行的話,把陣列中那個位置的元素刪掉就行。

即:

$scope.data.splice(index,1);// index 为你点击的索引
習慣沉默

你需要給刪除按鈕綁定上 ng-click,因為你要實現的是點選目前行的刪除按鈕,刪除目前行。

<button class="showBtn" ng-show="value.show" ng-click="removeLine($index)">删除</button class="showBtn" >
$scope.removeLine = function(index) {
  $scope.data.splice(index, 1);
}

至於 $index 是啥,其实就是 ng-repeat 过程中,一个隐藏的值。$index 存在于每一个生成的元素中,从 0 开始。$scope.data 也是从 index 为 0 开始,所以就有了上面的写法。只要你传入了当前的 $index,就可以定位到要删除的数据,直接在 data 中刪除就行。資料改變的時候就會自動更新頁面顯示內容,這是資料驅動的特色。


沒看懂你想在 $scope.redact 里面实现什么。如果你改 data.show,然后又在 button 里面写了 ng-show="value.show",那么证明这个 show 是用来控制 “删除” 按钮显示与否的,而不是去控制当前行显示与否。因此,看不出这段代码与你需求之间有何关联
另外,$(".change").html() 你这是在用 jQuery 去实现 toggle?jQuery 的思路与 AngularJS 就完全不同。jQuery 是事件驱动,AngularJS 是数据驱动。这里如果你要实现按钮文字 “编辑” 换成 “完成”,完全可以通过 $scope{{}}(interpolation)來實現。如:

$scope.buttonText = '编辑';

<button>{{buttonText}}</button>

然後給這個 button 加 ng-click

<button ng-click="edit()">{{buttonText}}</button>

然後寫好回調:

$scope.edit = {
  if ($scope.buttonText === '编辑') {
    $scope.buttonText = '完成';
  } else if ($scope.buttonText === '完成') {
    $scope.buttonText = '编辑';
  }
}

這樣就可以實現最基本的 toggle。可以做的最佳化是,如果你的狀態只有編輯和完成兩種,那麼完全可以設定一個 flag,$scope.editFlag = truetrue 代表编辑状态,false 代表完成状态。参照上面的思路,if 里面直接用这个 $scope.editFlag 去判斷就可以了。

既然用了 AngularJS,就去適應一下 AngularJS 的思路,對於你目前的需求,完全不需要用 jQuery 去實現

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板