javascript - 如何将实际对象(即对象的引用)传递给指令?

标签 javascript angularjs angularjs-directive json

在我的 Angular 应用程序中,我有一些嵌套的 ng-repeats 来解析一些预期的 JSON 对象,例如:

     {
         landAnimals: {
              horse: {
                   sound: "Nay",
                   legs: 4,
              },
              beaver: {
                    sound: "thwack",
                    legs: 2
              }
         },
         waterAnimals: {
              dolphin: {
                   sound: "Eee",
                   fins: 3,
              },
              goldfish: {
                    sound: "-",
                    fins: 1
              }
         }

    }

在某一时刻,我想做的是将动物类别传递给我的指令,并将另一个动物对象传递给它。

例如,如果用户将另一个动物拖动到我的应用中生成的列表中,我想将他拖动的动物添加到上面的 JSON 中。

为此,我尝试将动物对象传递给指令,然后向其中添加新动物。

例如:

<div ng-repeat="animalCategory in animals on-drop-success='animalCategory'">
     <div ng-repeat="(key, value) in animalCategory">
         {{key}}
     </div>
</div>

然后在我的 onDropSuccess 指令中,在 link 函数中,我尝试 (不用担心我是如何进行拖放的,即使是这个简单的测试它也不起作用)

...
link: function (scope, element, attrs) {
     attrs.onDropSuccess["newAnimal"] = {sound: "miy", legs: 2};
...

总而言之,我尝试将 animalCategory 对象传递给我的指令,以便我可以在其下添加更多对象。但这不起作用。即使我手动提供一个简单的对象(即它与拖动实现无关),它也不会添加对象

有什么想法为什么会发生这种情况吗?

最佳答案

目前,您没有引用实际对象,只是引用 attrs 上的属性。构造将返回一个字符串。

您可以通过多种方式获取实际引用。

使用scope.$eval

//Target object will be pulled in if it exists on the scope
// this will not work if you are using Isolate Scope
var targetObject = scope.$eval(attrs.onDropSuccess);

Isolate Scope 上使用 = 参数

您可以使用scope将参数拉入指令隔离范围。指令定义上的属性。

{
  scope:{
     onDropSuccess: '='
  }
  link: function(scope, elem, attrs){
     //Basically same as above, except that they 
     // are pulled from the parent scope
     var targetObject = scope.onDropSuccess;
  }
}

关于javascript - 如何将实际对象(即对象的引用)传递给指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27106661/

相关文章:

angularjs - 两个单独指令之间的通信

angularjs - 如何在指令模板中使用范围

javascript - 将 moment 与 Javascript Date 一起使用来格式化字符串时如何解决弃用警告

javascript - 将代码转换为 JS 对象文字模式

javascript - 向 AngularJS 中的输入字段添加前缀值

jquery - AngularJS滚动到元素防止浏览器跳转

angularjs - 在 AngularJS 中编写指令时,如何决定是否需要新作用域、新子作用域或新的独立作用域?

javascript - Ajax,防止点击多个请求

javascript - 使用 jquery 或 Javascript 更改 RadTextbox(Telerik textbox) 和 RadDatePicker(Telerik DatePicker) 背景颜色

javascript - 如何使用 angularJS 对字段进行条件掩码?