从父控制器传递对象到隔离作用域子指令

7

我有一个想在指令内部监视的对象。
指令具有隔离作用域,该对象来自父控制器。

DOM:
<div hello-directive obj-to-track="{{myObj}}"></div>

指令JS:

scope:{
   objToTrack:'@'
},
link:function(scope,element,attrs){
   scope.$watch(function(newValue){
      //Inside here, newValue is a JSON string
      //So is scope.objToTrack
   });
}

除了使用JSON.parse(),是否有其他方法从父控制器中获取实际对象?
谢谢。


1
你似乎混淆了对象和JSON。JSON是一种数据传递字符串格式。在你的应用程序中,你正在处理从传递的数据派生出来的对象和数组。 - charlietfl
好的...解释一下注释“在这里,newValue是一个JSON字符串”。这句话读起来有点不太通顺。 - charlietfl
这意味着 newValue 是一个有效的 JSON 字符串,不确定有什么不清楚的地方,抱歉。 - Francisc
除非您的应用程序处理将JSON显示为代码并且作用域属性包含JSON字符串,否则这没有意义。 - charlietfl
@ 将对象转换为 JSON 字符串。谢谢。 - Francisc
显示剩余3条评论
1个回答

8

只需使用等号"="绑定:

scope:{
    objToTrack: "="
}

像往常一样观看:

scope.$watch("objToTrack", function(newval, oldval) {
    ...
});

使用它作为:

<div hello-directive obj-to-track="myObj"></div>

3
我知道,但这使得双向绑定成为可能。这不是一个很大的问题,但如果可能的话,我宁愿不让指令写入它。如果不可能,那就只能这样做了。 - Francisc
除非'myObj'是“原始”值,否则不能禁止编写。我的意思是,即使您传递了对'myObj'引用的副本,指令仍然可以访问'myObj'的实际成员。如果在将其传递给指令之前进行了“angular.copy()”操作,则可能会使用“&”绑定,但这可能更麻烦。 - Nikos Paraskevopoulos
1
我有同样的需求,然后遇到了这个问题。我无法理解@NikosParaskevopoulos所说的话,后来发现了这个很好的解释,回答了我的问题,https://dev59.com/R2Yq5IYBdhLWcg3w-FXQ#14049482 - Annapoorni D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接