【问题标题】:Best way to dynamically update jQuery UI attribute with Angular JS?使用 Angular JS 动态更新 jQuery UI 属性的最佳方法?
【发布时间】:2013-10-23 21:55:35
【问题描述】:

我有一个属性,我在其中添加了“可拖动”指令。这将启用 jQuery UI 可拖动组件。我的指令如下:

  testModule.directive('draggable', function () {
    return {
      restrict: 'A',
      link: function (scope, element, attrs) {
        element.draggable({ revert: true });
      }
    }
  });

我有一个范围函数,它检查是否应该启用/禁用这些项目。我正在使用 ng-class 指令来添加/删除禁用的类。它看起来如下(它显然做了其他事情,但为简单起见,我只返回 false):

$scope.enabled = function(){
  return false;
}

因此,要应用我的残疾人课程,我可以执行以下操作:

<span draggable data-ng-repeat="item in items" data-ng-class="{disabled: enabled()}">{{item.Name}}</span>

我的问题是,如果我想做一些类似的事情并且启用时返回 false,那么最好的方法是什么。我研究过使用 $watch,但它不一定依赖于项目的变化,而是依赖于应用程序的状态,它结合了多个因素。我想要的只是一些简单的东西,如果启用返回 false 抓取元素并使用 jQuery 来禁用可拖动元素,就像这样 - $(element).draggable("disable")

我觉得应该有一个简单的方法来做到这一点,但我似乎无法获得正常运行的指令。

感谢您的帮助!

【问题讨论】:

    标签: javascript jquery jquery-ui angularjs angularjs-directive


    【解决方案1】:

    您可以将项目的状态传递给您已经创建的draggable 指令。

    HTML:

    <div draggable="item.enabled" data-ng-repeat="item in items" ng-class="{disabled: !item.enabled }">
        {{item.name}}
    </div>
    

    JavaScript:

    //in your controller
    $scope.items = [{ name:'item1', enabled: false}, { name:'item2', enabled: true}, { name:'item3', enabled: true}, { name:'item4', enabled: false}, { name:'item5', enabled: true}];
    
    app.directive('draggable', function () {
        return {
          restrict: 'A',
          link: function (scope, element, attrs) {
            $(element).draggable({ revert: true, disabled: !scope.$eval(attrs.draggable) });
          }
        }
    });
    

    http://jsbin.com/aZosUrE/4/

    【讨论】:

    • 谢谢!还有一个问题,如果启用是一项功能并且可以在整个应用程序中更改,这是一个问题吗?我以为链接功能只在第一次生成项目时执行。
    • 另外为了澄清,每个项目都没有启用的属性。 Enabled 是一个功能,它查看应用程序的多个方面以确定是否应启用可拖动。它不仅仅是一个简单的属性。
    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 2021-07-18
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    • 2021-05-17
    • 2020-11-26
    相关资源
    最近更新 更多