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

AngularJS组件:在控制器中使用绑定对象

金瑞
2023-03-14
问题内容

我使用Angular组件(this的第一个示例)。当我在组件中绑定对象时,可以在模板中访问它,但不能在控制器中访问它。

js:

function HeroDetailController() {
  console.log("Here I want to use hero.name: ");
  console.log(hero.name); // I want to use binding object in controller, but doesn't work
}

angular.module('heroApp').component('heroDetail', {
  templateUrl: 'heroDetail.html',
  controller: HeroDetailController,
  controllerAs: 'ctrl',
  bindings: {
    hero: '='
  }
});

的HTML:

<hero-detail hero="ctrl.hero"></hero-detail>

模板html(在这里有效):

<span>Name: {{ctrl.hero.name}}</span>

错误:

ReferenceError:未定义英雄

Plunker:https://plnkr.co/edit/U9CJLs6jgrlsZH6tUdr0


问题答案:

您将bindingsHeroDetailController上下文中获得价值this

function HeroDetailController() {
  var ctrl = this;
  console.log("Here I want to use hero.name: ");
  console.log(ctrl.hero);
}

虽然以上行不通。因为它不会在第一个摘要循环上传递与组件的初始绑定。

为了获得该值,您可以$onInit在组件上使用生命周期值。

function HeroDetailController() {
  var ctrl = this;
  console.log("Here I want to use hero.name: ");
  ctrl.$onInit = function(){
    console.log(ctrl.hero);
  }
}

即使没有,您也可以直接获得价值$onInit。同样,您必须$compileProvider像下面一样更改配置。(它已在1.6+中引入)

.config(function($compileProvider){
  $compileProvider.preAssignBindingsEnabled(true)
});

注意: 理想情况下,您不应该在应用程序中强制执行上述设置,我只是在前面进行了演示。

Demo Plunkr



 类似资料:
  • 本文向大家介绍详谈AngularJs 控制器、数据绑定、作用域,包括了详谈AngularJs 控制器、数据绑定、作用域的使用技巧和注意事项,需要的朋友参考一下 上次分享完该系列文章后有朋友也建议说1.x版本除了维护也没有必要学习,可以学习2.0开始学习,我也知道1.x无论是从性能还是架构上都没有2.x好,但是我想因为现在也有一些朋友还在用1.x版本,因为1.x升级到2.x难度很大,甚至可以说重构,

  • 问题内容: 如何在angularJS控制器(而不是angularJS内置的$ http)中使用jQuery的$ .ajax()函数,以便以后可以从视图/模板访问$ scope值? 我有这个有点简约的angularJS控制器: 并且在视图中类似: 但是,视图中的加载时将为空,尽管控制器中的a告诉我$ scope.user随便填充。 现在,如果我将呼叫替换为一切正常,则可以正常工作。 我知道这是内置的

  • 问题内容: 如何从网页的任何位置(控制器组件外部)调用控制器下定义的函数? 当我按下“获取”按钮时,它可以完美运行。但是我需要从div控制器外部调用它。逻辑是:默认情况下,我的div是隐藏的。在导航菜单中的某个位置,我按了一个按钮,它应该显示()我的div并执行“获取”功能。我该如何实现? 我的网页是: 我的js: 问题答案: 这是从外部调用控制器功能的一种方法: 您的控制器的功能在哪里。 你可以

  • 问题内容: 我们有一个页面打开一个模态对话框,其形式如下。但是,当我们点击应该处理表单动作的控制器时,表单对象是未定义的,并且我太过喜欢Angular新手了,不明白为什么… 这是父页面控制器持有的用于打开模式对话框的功能: 在这样的页面上: 邀请对话框html如下所示: 应该处理邀请的控制器在其他地方: 那么将表单范围带入控制器的正确方法是什么? 也许我需要注入并将其添加到函数中?但是当我这样做时

  • 我们有一个打开模态对话框的页面,表单如下。然而,当我们击中应该处理表单动作的控制器时,表单对象是未定义的,我是一个太多的Angular新手,无法理解为什么... 这是父页面控制器,具有打开模式对话框的功能: 在这样的页面上: “邀请”对话框html如下所示: 应该处理邀请的控制器在其他地方: 那么,将表单作用域放入控制器的正确方法是什么? 也许我需要将注入并向其添加功能?但是当我这样做的时候,动作

  • 问题内容: 为了进行快速验证,我在开发过程中已在浏览器控制台中测试了AngularJS服务。我注入到服务控制台的方法是在为说明这个问题,或 这与AngularJS 1.0.7完美配合。但是,升级到1.1.5之后,对于使用service的服务将不再起作用,不会发送xhr。 我已经测试过直接注射,它也不起作用。AngularJS changelog似乎没有关于此问题的记录。我可以知道这是什么问题吗?