【问题标题】:How to implement inline editing on datatables in AngularJS?如何在 AngularJS 中实现对数据表的内联编辑?
【发布时间】:2016-08-21 08:07:36
【问题描述】:

我正在尝试在 AngularJS 中实现对数据表的内联编辑。我试图找到一些例子,但我找不到。有一个很好的例子here,但它与 AngularJS 不兼容。那么,我如何在 AngularJS 中实现它呢?

我项目中的相关代码:

<tbody>
    <tr ng-repeat="meal in meals">
        <td>{{ meal.id }}</td>
        <td>{{ meal.name }}</td>
        <td>
            <a ng-click="open_yemek('lg', meal.name, meal.recipe, meal.ingredients)">Tıklayın</a>
        </td>
        <td class="text-center">
            <!--<small class="label label-warning" style="font-size: 9px !important;"><i class="fa fa-clock-o"></i> {{ yemek.sure }}</small>-->
            {{ meal.time }}
        </td>
        <td>{{ meal.category }}</td>
        <td>{{ meal.region }}</td>
        <td>{{ meal.user }}</td>
        <td class="text-center">{{ meal.rank }}/10</td>
        <td>{{ meal.status }}</td>
        <td>
            <i ng-click="editItem($index)" class="fa fa-pencil-square-o" aria-hidden="true"></i>
            <a ng-click="removeItem('yemekler',$index)"><i class="fa fa-trash-o" aria-hidden="true"></i></a>
            <a ng-click="addItem('yemekler')"><i aria-hidden="true" class="fa fa-plus"></i></a>
        </td>
    </tr>
</tbody>

这是JS:

$scope.dtOptions = DTOptionsBuilder.newOptions()
    .withOption('lengthMenu', [5, 10, 15])
    .withOption('autoWidth', true);

$scope.meals = {};

mealFactory.get()
    .success(function(data) {
        console.log(data);
        $scope.meals = data;
    });

【问题讨论】:

    标签: angularjs datatables inline-editing


    【解决方案1】:

    我的建议是在 td 元素内使用带有 &lt;input&gt; 标签的 ng-include。 这样,您将能够拥有一个“只读”的 td 和一个可编辑的,只需单击一下即可。

    你的表格的 HTML 代码应该是这样的:

    <tbody>
       <tr ng-repeat="row in data track by $index"> 
          <td> </td>
          <td ng-click="makeEditable($index)" ng-include="{{row.isEditable ? 'editableInput.html' : 'readonly.html'}}"> </td>
          <td> </td>
       </tr>
    </tbody>
    

    使用一些模板:

    <script type="text/ng-template" id="editableInput.html">
         <input type="text" ng-model="row.value"></input>
    </script>
    
    <script type="text/ng-template" id="readonly.html">
         <span>{{row.value}}</span>
    </script>
    

    在你的控制器中,点击监听器:

    $scope.makeEditable = function($index){
       //remove every previous editable input...
       if($scope.lastDataEditable != null)
          $scope.lastDataEditable = false;
    
       $scope.data[$index].isEditable = true;
       $scope.lastDataEditable = $scope.data[$index];
    }
    

    注意:您没有提供任何形式的代码,而且您的问题有点过于笼统。我向您提供了您应该做的一般想法。

    事实上,您还应该考虑将指令用于相同目的:这完全取决于您环境的复杂性。

    【讨论】:

    • 我试图根据您的建议更改我的代码,但我不能,所以我添加了我的代码形式。
    • 添加了JS代码。显示的数据正在从数据库中检索。
    • 您没有正确使用 ng-include。请参阅我关于如何使用它的答案。
    猜你喜欢
    • 2015-02-22
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多