【问题标题】:How to get attribute value of a custom tag in angularjs?如何在angularjs中获取自定义标签的属性值?
【发布时间】:2013-05-28 13:39:49
【问题描述】:

我正在尝试使用 angularJs 创建一个 自定义标签。此标记有一个名为data 的属性。 data 得到这样的值 <skillviz data="{{user.info}}"></skillviz>user.info 是一个 JSON 对象。但是当我尝试在我的指令定义中访问这个data 属性时,我得到undefined。这样做的正确方法是什么?

html代码

<div id="info-box" ng-repeat="user in users | orderBy:orderProp">            
          <div id="skill-block">
            <skillviz height="50" data="{{user.skills}}"></skillviz>
          </div>
      </div>

users 是一个 JSON 类型的对象,在控制器中声明。所以基本上users 将是

的列表(数组)
{"first_name": "Tifanny",

        "last_name": "Maxwell",
        "skills": [
            {"name": "Java", "score": 4.8, "color" : "red"},
            {"name": "C++", "score": 4.0, "color" : "blue"},
        ]
    }, 

services.js

angular.module('yott', []).directive('skillviz', function () {
return {
    restrict: 'E',
    link: function (scope, element, attrs) {
        element.html("<script>alert(" + attrs['data'] + ")</script>");
        });
    }
  }
});

弹出警告框说undefined

【问题讨论】:

  • 我刚刚将element.html("&lt;script&gt;alert(" + attrs['data'] + ")&lt;/script&gt;"); 更改为alert(attrs['data']);,然后它对我有用。 plnkr.co/k7VCGMpYISBkm5iOtTjp

标签: javascript json angularjs


【解决方案1】:

假设您有以下标记:

<div ng-controller="MyController" data-id="someCustomValue">
</div>

现在您可以在控制器中执行以下操作来访问 data-id

app.controller('MyController', function ($scope, $attrs) {
  console.log($attrs.id); // Prints 'someCustomValue'
});

【讨论】:

  • 这是无效的
【解决方案2】:

使用$observe观察属性的变化:

attrs.$observe('data', function(value) {
  console.log('data has changed value to ' + value);
});

$set更改值:

attrs.$set('data', 'new value');

或者,您可以使用@(绑定本地范围)、&amp;(提供在父范围的上下文中执行表达式的方法)或=(设置up 双向绑定) – 解释here

angular.module('yott', []).directive('skillviz', function () {
    return {
        restrict: 'E',
        scope { data: "=data" },
        link: function (scope, element, attrs) {
            element.html("<script>alert(" +scope.data + ")</script>");
            });
        }
      }
    });

【讨论】:

  • 另外,可以通过attrs['data']attrs.data访问属性值。请参阅examples
  • scope后面应该有一个分号,= data应该是=data,或者干脆=
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 2013-04-16
  • 2017-09-07
  • 2022-01-19
  • 2016-07-11
  • 1970-01-01
相关资源
最近更新 更多