【问题标题】:Evaluate $scope variable as value to a directive attribute将 $scope 变量评估为指令属性的值
【发布时间】:2016-12-29 01:15:37
【问题描述】:

我试图通过将 $scope.visibility 值评估为自定义指令作为属性来隐藏列,但它不起作用。

<td data-column-visible="visibility" data-table-property='id' data-table-property-type='button'>
    <button class="btn btn-xs btn-default" data-toggle="modal"
        ng-click="modify(user)">
        <i class="icon-pencil bigger-110"></i>
    </button>
    <button class="btn btn-xs btn-danger" data-toggle="modal"
        ng-click="delete(user)">
        <i class="icon-trash bigger-110"></i>
    </button>                   
</td>

我的指令:

'use strict';

define([ 'appModule' ], function(app) {
    // see example
    // http://stackoverflow.com/questions/14242455/using-jquery-datatable-with-angularjs
    app.directive('appDatatable', [ '$rootScope', '$compile', function($rootScope, $compile) {
        var _buildAoColumnDefs = function(scope, tableElement, tableData) {
                ....
                var defs = {
                    "mData": _tdElement.data("tableProperty"), "aTargets":[index], "bVisible": _tdElement.data("columnVisible")
                };
                ....
            return result;
        };
            return {
                scope : {
                    ...
                    columnVisible: "="
                },
                link : function(scope, element, attrs) {

                    // Watch changing aaData.
                    var dataTable = null;
                    scope.$watch('aaData', function(value) {
                        ...
                        var aoColumnDefs = scope.aoColumnDefs || _buildAoColumnDefs(scope, element, value);
                        ... 
                    }, true);
                }
            };
        }]);
    });

它总是评估为“可见性”而不是真/假。

【问题讨论】:

    标签: angularjs angularjs-directive datatables interpolation


    【解决方案1】:

    您从控制器传递的 data-column-visible="visibility" 可见性应该是一个原始值......这就是为什么它不会改变,因为它会创建一个新的 scope

    在您的控制器中,它应该是 $scope.visibility = true 或 false。将其更改为一个对象。

    $scope.someObject = {}
    $scope.someObject.visibility = true or false
    

    始终建议传递object,而不是primitives

    【讨论】:

    • 我在我的$scope 中替换了visibilityby someObject.visibility,但我仍然遇到同样的问题。当我console.log(_tdElement.data("columnVisible")) 我仍然收到someObject.visibility
    • 在您的链接函数中创建 scope.columnVisible = columnVisible 并现在将其传递给您的 _tdElement.data
    • 我收到了ReferenceError: columnVisible is not defined,你想让我通过scope.columnVisible 就像_tdElement.data(scope.columnVisible) 一样?
    • 您需要将范围变量传递给 var aoColumnDefs = scope.aoColumnDefs || _buildAoColumnDefs(范围、元素、值);这里...
    • 因为你已经通过了那里的范围......像这样收集它...... _tdElement.data(scope.columnVisible)
    猜你喜欢
    • 2018-07-03
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    相关资源
    最近更新 更多