大家好我的指令有问题,我在论坛搜索任何解决方案,但我没有找到对我有益的事。
我有一个指令,在我的html里面一个ng-repeat,看起来像这样
<custom-slide item="{{slides[$index]}}" pos='$index' ></custom-slide>
我需要以这种方式传递项目,因为我需要观察在主控制器中是否更改了此对象的值。
我的指令范围是这样的:
return {
restrict: 'E',
link: linker,
scope:{
item: '@item',
pos: '=pos'
//slide: '@slide',
}
我的问题是,当我使用scope.item我得到的是一个字符串,而不是一个objetc。
{type:0, isSelected:'slide' ,param1:'',param2:' ',param3:' '}
但是我把它作为字符串,它可以将它作为一个对象,而不需要解析
任何建议!!?非常感谢你!
修改
我需要将item作为对象,因为在我的链接器中我更改了指令的模板,并且在此模板中我有类似的东西:
<div>
<div class="mainText">{{scope.item.param1}}</div>
<div class="footer Text">{{scope.item.param2}}</div>
</div>
所以当评估{{scope.item.param1 }}
时,该值是未定义的,因为它不是一个对象
答案 0 :(得分:0)
尝试从项目attr:
中删除{{}}<custom-slide item="slides[$index]" pos="$index"></custom-slide>
答案 1 :(得分:0)
如果您尝试绑定表达式,则应使用=
:
return {
restrict: 'E',
link: linker,
scope:{
item: '=',
pos: '=pos'
//slide: '@slide',
}
然后在没有大括号的属性中传递表达式:
<custom-slide item="slides[$index]" pos="$index" ></custom-slide>
答案 2 :(得分:0)
你得到一个字符串,因为你真的将JSON放在DOM中,这是一个非常糟糕的主意,并且无法通过引用来修改。
基本上你不能将JSON作为属性传递,实际上没有理由。这是你的指令的一个版本,它只传递你如何从范围获取数据,并使用$ parse实际获取该数据。
HTML
<custom-slide item="slides[$index]}.item}" pos='$index' ></custom-slide>
指令
module.directive('customSlide', function($parse) {
return {
restrict: 'E',
link: function(scope, element, attrs) {
var pos = attrs.pos;
var item = $parse(attrs.item)(scope);
}
}
});