首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AngularJS:数组之间的数据绑定

AngularJS:数组之间的数据绑定
EN

Stack Overflow用户
提问于 2016-12-13 08:42:38
回答 4查看 826关注 0票数 10

给定一个数组sourceArray,我想创建一个依赖于第一个数组条目的targetArray。这意味着创建的数组应该包含每个源条目的条目,并在sourceArray更改时进行更新。然而,修改targetArray永远不应该更新源代码。

只要sourceArray是静态的,这种Plunker就可以工作。一旦你开始修改source-entries,它显然不会正确地更新目标,因为我缺乏一个合适的数据绑定机制。

我需要通过观察sourceArray来手动更新targetArray吗?还是有一种由Angular实现的单向数据绑定机制,我可以使用它来保持两个数组的同步?

EN

回答 4

Stack Overflow用户

发布于 2016-12-16 17:46:26

就像普里塔姆说的。您应该使用$watch。但必须将Collection绑定到它,才能使其工作。在手表内部合并数组。

查找此工作示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$scope.$watchCollection(angular.bind(this, function () {
    return this.sourceArray;}), function (newVal, oldVal) {

      var arr = [];
      for(var i in vm.sourceArray){
         var shared = false;
         for (var j in vm.targetArray)
             if (vm.targetArray[j].id == vm.sourceArray[i].id) {
                 shared = true;
                 break; 
             }
         if(!shared) arr.push(vm.sourceArray[i])
      }
      console.log(arr);
      vm.targetArray = vm.targetArray.concat(arr);
    },true);

http://plnkr.co/edit/E2inRLtwfWnb1VBymNNl?p=preview

票数 3
EN

Stack Overflow用户

发布于 2016-12-13 08:53:55

您应该使用$watch。然后添加必要的函数。

您可以查看hereofficial documentation.

$watch( watchExpression,listener,objectEquality);注册一个侦听器回调,以便在watchExpression发生更改时执行。

每次调用$digest()时都会调用watchExpression,它应该返回要监视的值。(在使用相同的输入多次执行时,watchExpression不应更改其值,因为$digest()可能会多次执行它。也就是说,watchExpression应该是幂等的。)仅当当前watchExpression的值与前一次watchExpression调用的值不相等时,才会调用侦听器(初始运行除外,见下文)。不等式是根据引用不等式确定的,通过!== Javascript运算符进行严格比较,除非objectEquality ==为true (见下一点)当objectEquality ==为true时,watchExpression的不等式根据angular.equals函数确定。为了保存对象的值以便以后进行比较,可以使用angular.copy函数。因此,这意味着观察复杂的对象将具有不利的内存和性能影响。由于angular.copy的限制,不应使用此选项来监视属于或包含文件对象的对象中的更改。监视侦听器可能会更改模型,这可能会触发其他侦听器触发。这是通过重新运行观察器直到没有检测到任何更改来实现的。重新运行迭代限制为10,以防止无限循环死锁。如果希望在调用$digest时收到通知,可以注册一个不带侦听器的watchExpression函数。(准备好对watchExpression的多个调用,因为如果检测到更改,它将在单个$digest周期中执行多次。)

在将监视器注册到作用域之后,将异步调用侦听器fn (通过$evalAsync)来初始化监视器。在极少数情况下,这是不可取的,因为侦听器是在watchExpression的结果没有改变时调用的。要在监听器fn中检测这种情况,可以比较newVal和oldVal。如果这两个值相同(===),则由于初始化而调用侦听器。

票数 1
EN

Stack Overflow用户

发布于 2016-12-17 07:25:19

您可以使用$watch表达式。

这是另一种方式:-(下载underscore.js或CDN)

http://plnkr.co/edit/hrOrEdaQ0M7wEgWlRHlO?p=preview

method.

  • underscore.js
  1. angular.js copy (angular.copy()) extend方法。var app = angular.module('plunker',[]);app.controller('MainCtrl',function($scope) { var vm = this;vm.sourceArray = {id:'0',name:'someObject'},{id:'1',name:'anotherObject'};vm.targetArray = angular.copy(vm.sourceArray);// angular.copy(vm.sourceArray,vm.targetArray);vm.push = function(){ let found = false;angular.forEach(vm.sourceArray,function(el){ if (el.id === vm.id){ el.name = vm.name;found = true;} });if (! found ){ vm.sourceArray.push({id: vm.id,名称: vm.name});_.extend(vm.targetArray,vm.sourceArray);} };vm.pushTarget = function(){ let found = false;angular.forEach(vm.targetArray,function(el){ if (el.id === vm.id1){ el.name = vm.name1;found= true;} });if (!found){ console.log({id: vm.id,姓名: vm.name}) vm.targetArray.push({id: vm.id1,姓名: vm.name1});} };

});

你可以获得underscore.js代码:-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_.extend = createAssigner(_.allKeys);

// An internal function for creating assigner functions.
var createAssigner = function(keysFunc, undefinedOnly) {
    return function(obj) {
      var length = arguments.length;
      if (length < 2 || obj == null) return obj;
      for (var index = 1; index < length; index++) {
        var source = arguments[index],
            keys = keysFunc(source),
            l = keys.length;
        for (var i = 0; i < l; i++) {
          var key = keys[i];
          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];
        }
      }
      return obj;
    };
  };

  // Retrieve all the property names of an object.
  _.allKeys = function(obj) {
    if (!_.isObject(obj)) return [];
    var keys = [];
    for (var key in obj) keys.push(key);
    // Ahem, IE < 9.
    if (hasEnumBug) collectNonEnumProps(obj, keys);
    return keys;
  };

   // Extend a given object with all the properties in passed-in object(s).
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41116766

复制
相关文章
十三、表连接
表连接(JOIN)是在多个表中间通过一定的连接条件,使表之间发生关联进而能从多个表之间获取数据。简单的表连接语法如下:
喵叔
2021/06/25
8570
十三、表连接
Oracle表连接
  内连接:查询满足条件的结果集,是相对于外连接来说的(条件的话由很多种可以等于、不等于、大于、小于等等)。
翎野君
2023/05/12
7310
如何使用python连接MySQL表的列值?
MySQL 是一个开源关系数据库管理系统,广泛用于存储、管理和组织数据。使用 MySQL 表时,通常需要将多个列值组合成一个字符串以进行报告和分析。Python是一种高级编程语言,提供了多个库,可以连接到MySQL数据库和执行SQL查询。
很酷的站长
2023/08/11
3080
如何使用python连接MySQL表的列值?
面试之前,MySQL表连接必须过关!——表连接的原理
我们知道,所谓表连接就是把各个表中的记录都取出来进行依次匹配,最后把匹配组合的记录一起发送给客户端。比如下面把t1表和t2表连接起来的过程如下图
砖业洋__
2023/05/06
2K0
面试之前,MySQL表连接必须过关!——表连接的原理
连表查询的介绍_连接表
大家好,又见面了,我是你们的朋友全栈君。 1、连表查询的原因 (1)如果查询结果不在一个表中,在多个表中,那就需要将表关联,进行连表查询。 (2)连表查询大多数都作用在外键得基础上。—表与表之间有关
全栈程序员站长
2022/10/05
3.1K0
连表查询的介绍_连接表
MySQL之表连接
当需要同时显示多个表的字段时,就可以用表连接来实现这样的功能。从大类上分,表连接可分为内连接和外连接,它们之间的最主要区别是,内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。
秋白
2019/02/21
2K0
MySQL之表连接
【MySql】表的内连接和外连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
平凡的人1
2023/10/15
2960
【MySql】表的内连接和外连接
简单备份wordpress连接表
用过 wordpress 的朋友都知道,WordPress 可以导出 WordPress eXtended RSS 或 WXR 文件,它包含了您的全部文章、页面、评论、自定义域、分类目录和标签。我们可以在再次安装 WordPress 时导入它。那么WordPress 的链接表怎么备份呢?
空空裤兜
2023/03/03
6870
MySQL表的内外连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。而使用where进行笛卡尔积筛选的时候,后面必须跟着一个过滤条件,将不合理的数据筛选掉,并且这时候再跟着其他条件就需要and其他条件,所以这种方式的内连接虽然可以,但是容易将内连接的条件与其他约束条件混淆,不容易区分。
每天都要进步呀
2023/10/16
2160
MySQL表的内外连接
SQL三表连接查询
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135565.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/18
2.1K0
MySQL | 表的内连接
数据操作语言:表连接查询(一) 从多张表中提取数据 从多张表提取数据,必须指定关联的条件。如果不定义关联条件就会出现无条件连接,两张表的数据会交叉连接,产生 笛卡尔积。 规定了连接条件的表连接语句,就不会出现笛卡尔积。 # 查询每名员工的部门信息 SELECT e.empno,e.ename,d.dname FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno; 表连接的分类 表连接分为两种:内连接 和 外连接 内连接是结果集中只保留符合连接条件的记录 外
Zkeq
2022/05/18
3.4K0
MySQL | 表的内连接
关于哈希表,你该了解这些!
首先什么是 哈希表,哈希表(英文名字为Hash table,国内也有一些算法书籍翻译为散列表,大家看到这两个名称知道都是指hash table就可以了)。
代码随想录
2020/07/13
5830
学习日志——SQL几种表连接和连接效率
最近在进行一个数据展示的项目,问题是公司目前的情况是采集到了数据,将数据存入到了一个数据中心,然后就没有任何操作了。也就是说要从原始数据当中查询数据进行数据展示,这是一个很难受的过程,但是又是一个要必然经历的过程,因为原始数据来了之后,必然要通过实际的业务来检验数据的正确性,有效性和质量,然后就对应的业务数据进行清洗,提取存入业务库,方便以后的操作。然后后端代码基本上没怎么写,全部都思考查询sql应该怎么写了。
海加尔金鹰
2020/06/09
2.2K0
Oracle数据库 表连接与表设计
select deptno,e.ename,d.dname from emp e natural join dept d;
wolf
2020/09/21
2.2K0
Oracle表连接学习笔记
内连接:指表连接的结果只包含那些完全满足连接条件的记录。下面学习一下内连接的,给个例子,这里创建两张表,然后用内连接方式查询,看看例子:
SmileNicky
2019/06/25
9200
如何制作bom表_如何制作bom表
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/175678.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
3K0
树状数据库表查询2次以上(自连接、内连接、别名、邻接表)方法
https://www.cnblogs.com/kissdodog/p/3297894.html——这个讲清楚了。
hotqin888
2022/05/07
4530
执行计划之表连接1:连接树(Join Trees)
阅读官方在线文档无疑是学习Oracle最好的方法,本文参考在线文档介绍表连接以及连接树(Join Trees)。
SQLplusDB
2022/08/19
6550
执行计划之表连接1:连接树(Join Trees)
SAS中哈希表的连接问题
哈希表即散列表(Hash table),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。在SAS中使用哈希表十分简单,你并不需要知道SAS内部是怎么实现的,只需要知道哈希表是存储在内存中的,查找是根据key值直接获得存储的地址的精确匹配。加上使用哈希表合并数据集时不用排序的优点,在实际应用中可以极大的提高程序运行效率,尤其是数据集较大的时候。但是由于哈希表是放到内存中的,因此对内存有一定要求!
专业余码农
2020/07/15
2.4K0
点击加载更多

相似问题

当键是数字时,python字典

10

混合字典排序和数字排序

11

当数字的数字分开时对它们进行排序

10

当数字被重复时,数据读取

21

仅当没有重复的数字时才打印数字

60
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文