当前位置: 首页 > 面试题库 >

AngularJS将对象传递给指令

包嘉懿
2023-03-14
问题内容

这里有角的新手。我试图找出将对象传递给指令时出了什么问题。

这是我的指令:

app.directive('walkmap', function() { 
  return {
    restrict: 'A',
    transclude: true,
    scope: { walks: '=walkmap' },
    template: '<div id="map_canvas"></div>',
    link: function(scope, element, attrs)
    {
      console.log(scope);
      console.log(scope.walks);
    }
  };
});

这是我调用指令的模板:

<div walkmap="store.walks"></div>

store.walks 是一组对象。

当我运行此,scope.walks日志,undefinedscope日志罚款的范围,甚至有一个walks与所有的数据,我找孩子。

我不确定我在这里做错了什么,因为这种确切的方法以前对我有用。

编辑:

我已经用所有必需的代码创建了一个插件:http
://plnkr.co/edit/uJCxrG

如您所见{{walks}},该作用域在范围中可用,但我需要在仍记录为未定义的链接函数中访问它。


问题答案:

由于您正在使用$resource获取数据,因此伪指令的链接函数在数据可用之前就已运行(因为来自的结果$resource是异步的),因此链接函数中的第一次scope.walks将为空/未定义。由于指令模板包含{{}}s,因此Angular会设置$watchon
walks,因此,当$resource填充数据时,$watch触发器和显示将更新。这也解释了为什么您会在控制台中看到步行数据-
当您单击链接以扩大范围时,将填充数据。

要解决您的问题,请在链接函数$watch中了解何时有可用数据:

scope.$watch('walks', function(walks) {
   console.log(scope.walks, walks);
})

在生产代码中,请防止未定义代码:

scope.$watch('walks', function(walks) {
  if(walks) { ... }
})

更新: 如果您使用$resource支持Promise的Angular版本,另请参阅@sawe的答案。



 类似资料:
  • 问题内容: 我想知道是否有一种方法可以将参数传递给指令? 我想做的是从控制器添加一个指令,如下所示: 是否可以同时传递一个参数,以便我的指令模板的内容可以链接到一个作用域或另一个作用域? 这是指令: 如果我想使用相同的指令但使用$ scope.title2怎么办? 问题答案: 这是我解决问题的方法: 指示 控制者 现在,我可以通过同一指令使用不同的作用域,并动态附加它们。

  • 问题内容: 我有以下指令: 这是对象结构: 我希望它根据对象内部的数据生成一个链接。 不幸的是,由于我无法访问该对象的任何内部值,因此它不起作用,但是如果我将其传递给一个简单的数据结构,例如: 我可以使用访问它。 这是我的指令代码: 谢谢 问题答案: 在Angularjs官方网站上阅读说明: @或@attr- 将本地范围属性绑定到DOM属性的值。由于DOM属性是字符串,因此结果始终是字符串。如果未

  • 问题内容: 我在php中有对象,每个对象代表一个“项目”以及与之相关的所有信息。 当用户浏览页面时,这些对象应传递给javascript。理想情况下,镜像相同的结构,因此我可以使用Raphael在我的网站上将每个项目及其信息显示为单独的形状。 但是,如何将对象从php转换为javascript? 问题答案: 您可以将PHP对象转换为数组,然后使用JSON函数对其进行编码。之后,从JavaScrip

  • 问题内容: 看看这个小提琴,我必须更改什么,才能使用我在HTML中定义的参数来评估模板中的表达式?因为我通过了SAVE按钮,所以它应该调用控制器的- function? 我看不出来。感谢帮助! 问题答案: 您可以按照Roy的建议设置两种方式的数据绑定。因此,如果您既想要又绑定到本地范围,则可以 由于要传递这些值,因此可以在指令的控制器中访问它们。但是,如果您想在父作用域的上下文中运行一个函数,这似

  • 问题内容: 通过指令的属性将数组传递给指令时,我目前遇到问题。我可以将其读取为字符串,但是我需要将其作为数组,所以这是我想出的,但是不起作用。帮助任何人?提前 Javascript :: HTML :: 问题答案: 如果要从您的作用域访问此数组,即加载到控制器中,则只需传递变量名称即可: 指示: 模板:

  • 问题内容: 我想将由Razor MVC帮助程序在我的登录表单中生成的RequestVerificationToken传递给我为管理应用程序身份验证而完成的AngularJS服务 我的形式如下: @ Html.AntiForgeryToken()以这种方式呈现: 我的AngujarJs控制器成功注入了我的“ loginService”,我可以通过Post发送用户名和密码到服务 服务: 我的问题是如何