繁体   English   中英

如何测试指令中属性的存在?

[英]How to test the existence of an attribute in a directive?

我想根据指令中是否有editable的属性启用一个按钮:

编辑:

  <table-list items="users" editable></table-list>

不可编辑:

  <table-list items="users"></table-list>

我试过这个:

 .directive('tableList', function ($attr) {
    return {
      restrict: 'EA',
      template: '<a ng-if="editable" class="btn btn-default" href="#">Add to group</a>' +
    '<table class="table table-stripped">' +
    '<thead>' +
      '<tr>' +
        '<th>#</th>' +
        '<th>Name</th>' +
        '<th>Users</th>' +
        '<th>Buildings</th>' +
        '<th>Created at</th>' +
      '</tr>' +
    '</thead>' +
    '<tbody>' +
      '<tr ng-repeat="item in items">' +
        '<th scope="row"><input type="checkbox" value="0"></th>' +
        '<td><a href="#/groups/{{item.id}}">{{item.name}}</a></td>' +
        '<td>_</td>' +
        '<td>_</td>' +
        '<td>_</td>' +
      '</tr>' +
    '</tbody>' +
      '</table>',
      scope: {
    items: "=",
    editable: "="
      },

但按钮没有显示。

这样做的正确方法是什么?

如果您只想依赖于属性的存在(即使它被设置为false ),您可以检查它是否在链接函数中使用$attrs定义:

scope: {
  items: "="
},
link: function($scope, $element, $attrs) {
  $scope.editable = $attrs.editable !== undefined;
}

JSFiddle

但是,这不会被动(即如果在运行时添加属性,指令将不显示按钮)。 如果需要,你可以使用$attrs.$observe()

只需添加true

<table-list items="users" editable="true"></table-list>

的jsfiddle

获取属性并将其设置为范围时,就像设置值一样。 您的editable属性没有任何价值。 如果你要做<table-list items="users" editable="true"></table-list>它会更好。

在指令中,您可以使用@而不是=作为属性。

这会将范围的editable属性设置为字符串“true”,如果您希望它是布尔值,则可能需要链接函数中的某些逻辑

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM