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

如何在同级组件之间传递数据而不使用$ scope?

强承望
2023-03-14
问题内容

我正在以这种方式制作包含3个子组件的组件:

<header-component>
<side-component>
<main-component>

主要组成部分包含英雄列表。标头组件包含两个按钮,用于将主组件上的视图切换到列表或网格视图。

我现在遇到的问题是将数据从标头组件传递到主组件。因此,当我单击网格按钮时,主要内容上的视图应更改为网格视图,与行视图相同。

如何在角度1.5的子组件之间传递数据?


问题答案:

成分法

我建议您与Angular
2组件方法保持一致,并使用输入 / 输出方法。如果这样做,您将能够轻松迁移到Angular 2,因为组件在概念上是相同的(仅语法有所不同)。这就是您的操作方式。

因此,我们基本上希望头文件和主要组件与头文件共享状态,以便能够更改它。我们可以使用几种方法来使其工作,但是最简单的方法是利用中间父控制器属性。因此,假设父控制器(或组件)定义了view要由标头(可以读取和修改)和主(可以读取)组件使用的此属性。

标头组件 :输入和输出。

这是简单的标头组件的外观:

.component('headerComponent', {
  template: `
    <h3>Header component</h3>
    <a ng-class="{'btn-primary': $ctrl.view === 'list'}" ng-click="$ctrl.setView('list')">List</a>
    <a ng-class="{'btn-primary': $ctrl.view === 'table'}" ng-click="$ctrl.setView('table')">Table</a>
  `,
  controller: function() {
    this.setView = function(view) {
      this.view = view
      this.onViewChange({$event: {view: view}})
    }
  },
  bindings: {
    view: '<',
    onViewChange: '&'
  }
})

这里最重要的部分是绑定。使用view: '<'我们指定的header组件将能够读取外部内容并将其绑定为view自己控制器的属性。使用onViewChange: '&'组件定义的输出:用于通过其所需通知/更新外部世界的渠道。标头组件将通过此通道推送一些数据,但是它不知道父组件将使用它做什么,因此它不在乎。

所以这意味着header控制器可以像

<header-component view="root.view" on-view-change="root.view = $event.view"></header-component>

主要组成部分 :输入。

主要组件更简单,只需定义接受的输入即可:

.component('mainComponent', {
  template: `
    <h4>Main component</h4>
    Main view: {{ $ctrl.view }}
  `,
  bindings: {
    view: '<'
  }
})

父视图

最后,它们全部连接在一起:

<header-component view="root.view" on-view-change="root.view = $event.view"></header-component>
<main-component view="root.view"></main-component>

看看并玩简单的演示。

angular.module('demo', [])



.controller('RootController', function() {

  this.view = 'table'

})



.component('headerComponent', {

  template: `

    <h3>Header component</h3>

    <a class="btn btn-default btn-sm" ng-class="{'btn-primary': $ctrl.view === 'list'}" ng-click="$ctrl.setView('list')">List</a>

    <a class="btn btn-default btn-sm" ng-class="{'btn-primary': $ctrl.view === 'table'}" ng-click="$ctrl.setView('table')">Table</a>

  `,

  controller: function() {

    this.setView = function(view) {

      this.view = view

      this.onViewChange({$event: {view: view}})

    }

  },

  bindings: {

    view: '<',

    onViewChange: '&'

  }

})



.component('mainComponent', {

  template: `

    <h4>Main component</h4>

    Main view: {{ $ctrl.view }}

  `,

  bindings: {

    view: '<'

  }

})


<script src="https://code.angularjs.org/1.5.0/angular.js"></script>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.css" />



<div class="container" ng-app="demo" ng-controller="RootController as root">



    <pre>Root view: {{ root.view }}</pre>



    <header-component view="root.view" on-view-change="root.view = $event.view"></header-component>

    <main-component view="root.view"></main-component>



</div>

演示: http
//plnkr.co/edit/ODuY5Mp9HhbqA31G4w3t?p =
info

这是我写的一篇博客文章,详细介绍了基于组件的设计:http : //dfsq.info/site/read/angular-components-
communication



 类似资料:
  • 问题内容: 我在页面上有一个组件的两个实例(搜索字段),在它们之间有另一个组件(进行服务器调用的按钮),例如: 我要做的只是将一个未修改的参数从CardSearch字段传递到RunOnServer按钮,但是如果简单的话,我该死的。据此,我可以使用this.state.var作为道具,但是这样做可以在编译代码时给我’undefined.state.var’。React的官方文档并不出色。他们只是告诉

  • 我正在创建一个用户设置帐户使用故事板的5个步骤。每个步骤都有一个ViewController:1:)输入姓名、联系人等,2:)导入照片,3:)输入等4:)更多输入5:)确认页面,如果用户点击“确认”->获取所有输入并上传解析。 我在网上搜索时得到的唯一解决方案是创建一个函数“Prepare for Segue”并传递信息...但对我来说,这没有任何意义: 如果我有1000个viewcontroll

  • 我有两个viewController,分别命名为viewController和我想获取数据并使用委托将其发送到secondViewController。另外,我在secondViewController中有一个数组,当每个数据来自VC1时,它必须存储数据,如; segue1,第一个数据来了->arrayElements{firstData}segue2,第二个数据来了->arrayElements

  • 我正在学习通过教程在父组件和子组件之间传递数据。我仔细检查了我的代码,仍然没有找出错误。 我的index.js Home.js 按钮更改链接onClick事件正在调用changeLink函数,该函数将新链接传递给props。 错误:-

  • 我想把我的数据传递给其他的viewcontroller,但我做不到。我的密码在下面。ViewControllers的屏幕截图在这里。当用户写出他们的名字和密码时,我想传递另一个用户的数据,但他们之间还有一个viewcontroller。我认为这是一个问题,但我可以移除这个额外的视图控制器,所以我想了解如何才能把这些数据传递给其他的一个? 第一个viewcontroller的代码 第二个viewco

  • 订单列表 对于Product.class(string,double,int,int)和Order.class(string,double,int)我有一个单独的类。我还有一个用于productlist的arrayAdapter,它有增加/减少产品数量的按钮。