- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以帮助我理解为什么 Lodash 在使用 findWhere 获取对象时会进行引用复制,这使我能够将整个变量绑定(bind)到范围并根据用户操作动态更改它。但是使用复制运算符完成相同的操作无法更新源对象。我已经拿出了一个笨蛋 http://plnkr.co/edit/Phy5xQnGBYsBnenMQHOd?p=preview
HTML 代码:
<html ng-app="angularjs-starter">
<head lang="en">
<meta charset="utf-8" />
<title>Custom Plunker for service response data binding</title>
<script data-require="lodash.js@2.4.1" data-semver="2.4.1" src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<input type="text" data-ng-model="inputModel" />
<input type="text" data-ng-model="inputModel2.desc" />
<button data-ng-click="btnClick()">Click me and check console</button>
</body>
</html>
JS 代码:
var app = angular.module('angularjs-starter', []);
app.controller('MainCtrl', function($scope,$http) {
var someServiceResponse = [{"code":"1","desc":"apple"},{"code":"2","desc":"orange"}];
$scope.inputModel = someServiceResponse[0].desc;
$scope.inputModel2 = _.findWhere(someServiceResponse,{'code':'2'});
$scope.btnClick = function(){
console.log($scope.inputModel);//Outputs the changed value in the text box1
console.log($scope.inputModel2.desc);//Outputs the changed value in the text box2
console.log(someServiceResponse[0].desc); // Still shows the old value from the service response - always shows apple
console.log(someServiceResponse[1].desc); // shows updated value from second text box
};
});
最佳答案
背景:
Service 有一个变量对象 Object1,Object1 有一个变量 String2,它是对字符串的引用。
Object1 将 a 指向内存位置 1,变量 String2 指向包含该字符串的内存位置 2。
Object = {}
Object1.String2 = ""
Object1 -> 1
Object1.String2 -> 2
情况1:
Controller 有一个变量 String3,该变量设置为从服务请求的 Object1.String2。
String3 现在指向包含该字符串的内存地址 2。
当新数据来自 View 时, Controller 会更改 String3 值。 String3 现在指向内存位置 3。Object1 变量 String2 仍然指向 2,因为我们没有修改 Object1 变量,我们修改了变量 String3。
String3 = Object1.String2
String3 -> 2
Object1 -> 1
Object1.String2 -> 2
String3 = "changed"
String3 -> 3
Object1 -> 1
Object1.String2 -> 2
情况2:
Controller 有一个变量Object2,该变量被设置为从服务请求的Object1。
Object2 现在指向包含该对象的内存地址 1。
当新数据来自 View 时, Controller 会更改 Object2.String2 值。 Object2.String2 现在指向内存位置 3。Object2 引用了 Object1,因此 Object1.String2 实际上被修改为指向内存位置 3。由于服务引用了 Object1,因此实际上“更新为服务”。
Object2 = Object1
Object2 -> 1
Object1 -> 1
Object1.String2 -> 2
Object2.String2 = "changed"
Object2 -> 1
Object1 -> 1
Object1.String2 -> 3
关于javascript - 了解 Lodash - JavaScript 中的 findwhere 和复制运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641011/
有没有办法使用 findWhere 和不相等的值(尝试使用它与标准)? 例如。 Books.findWhere('sale' : true, 'category': ne('exclude me')
我有一个主干集合,我正在尝试添加模型,以便我可以显示可用表单的列表,您可以在下拉列表中将其添加到 ui 中。这似乎一直有效,直到他们需要能够添加不止一种类型。 当我尝试添加到集合中时,我的 findW
我有一个如下所示的数据结构 var foo = [ { bar: { something: 123 }, baz: {
我正在寻找如何使用下划线 _.findWhere 并将其转换为 es6 原生 javascript? _.findWhere($scope.template, {id: $scope.approveT
此代码返回模型在集合中出现的次数的警报消息。我想只打印一次,并在用户名和密码匹配后立即退出循环。该怎么办? this.collection.find(function(
我有一个文件夹/文件对象,如下所示: { about.html : { path : './about.html' }, about2.html : { path : '.
我有一个列出所有用户的数组,每个新连接都会连同他们上传的文件名添加到该数组中。两个人各上传一个文件后的示例是: [ '{ 127.0.2.2: test.pdf}', '{ 127.0.0.1: as
我正在尝试使用 Underscore.js 库的 findWhere 函数从 node.js 服务器上的数组中高效地查找对象,但我不明白为什么它总是返回 undefined。 我使用 Node 控制台
当我使用它来搜索具有数组值的对象时, _.findwhere 总是返回给我未定义。 var nameArray = [{name:'firstName',value : ['Amruta','Swap
我有一个文件夹/文件对象,如下所示: { about.html : { path : './about.html' }, about2.html : { path : '.
where() 和 findWhere() 方法返回集合中的模型本身还是模型的副本?正如我读过的documentation它没有明确具体地说明这种情况。 第一种方式,可以修改它的返回结果并使用 set
我有以下下拉代码 -1) && AddEditUserCtrl.isInEditMode" data-ng-change="AddEditUserCtrl.roleChanged(A
我必须将以下内容添加到此过滤器, “如果传入的 CountryID 等于 (999),则搜索应该搜索所有国家,而不是按国家过滤。” 我目前拥有的是这个,这让我很困惑。 var query = rep.
下划线有一个方便的小函数,findWhere()可用于在列表中查找特定结构,例如 myList = [ {'name': 'Thor'}, {'name': 'Odin'}, {'name
在使用 _.findWhere 函数时,我无法弄清楚如何在 underscore.js 中动态设置属性。 这是该函数的文档: findWhere_.findWhere(list, properties
有人可以帮助我理解为什么 Lodash 在使用 findWhere 获取对象时会进行引用复制,这使我能够将整个变量绑定(bind)到范围并根据用户操作动态更改它。但是使用复制运算符完成相同的操作无法更
如何进行以下过滤: [{ "id": 100, "title": "Tlt1", "tax": [{ "name": "Tax1", "id":
我正在使用分配了 id 生成器的域类构建一个 grails 应用程序(也就是说,它们不会自动生成)。假设我有一个域类 Parent 与 static hasMany = [children: Chil
我有一个具有许多属性的模型。其中之一是名为“developerId”的字段,其中包含一个与 MongoDB ObjectId 具有相同长度和特征的字符串(它实际上是一个字符串化的 ObjectId)。
我使用 find : find("from domain d where d.id=? AND d.name=?",[params.id, params.name]) 这给了我第一个匹配结果。 现在
我是一名优秀的程序员,十分优秀!