我正在尝试使用angularJs创建一个自定义标签.此标记具有名为data的属性.数据得到这样的值< skillviz data =“{{user.info}}”>< / skillviz> ;. user.info是一个
JSON对象.但是当我尝试在我的指令定义中访问这个数据属性时,我得到未定义.这样做的正确方法是什么?
<div id="info-Box" ng-repeat="user in users | orderBy:orderProp"> <div id="skill-block"> <skillviz height="50" data="{{user.skills}}"></skillviz> </div> </div>
用户是一个JSON类型的对象,在控制器中声明.所以基本上用户将会是一个列表(数组)
{"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>"); }); } } });
警报框弹出说未定义
解决方法
使用$观察来观察属性的更改:
attrs.$observe('data',function(value) { console.log('data has changed value to ' + value); });
和$设置来改变价值:
attrs.$set('data','new value');
或者,您可以使用@(绑定本地范围)将其链接到指令范围,并将其链接到指令范围(提供在父范围上下文中执行表达式的方法)or =(设置双向绑定) – 解释为here
angular.module('yott',function () { return { restrict: 'E',scope { data: "=data" },attrs) { element.html("<script>alert(" +scope.data + ")</script>"); }); } } });