为什么jquery .data()方法不能获取更新的值?

时间:2015-09-25 12:53:46

标签: jquery angularjs jquery-ui-sortable angular-ui-sortable

我使用文件夹和子文件夹实现了一些FilePanel。

通过Chrome开发者工具,我可以看到ui.item.sortable.droptarget具有data的{​​{1}}属性,但是当我尝试在代码中访问它时(通过jquery parent-folder-id == 2方法)它返回10(我最近的另一个文件夹' s的值)。 为什么它没有更新?当我移动到另一个文件夹时 - 根据该文件夹的服务器值分配data的新值。 DOM正确更新...

vm.parentId

enter image description here

稍后添加: 即使我将.data()getter更新为<ul ui-sortable="vm.sortableOptions" ng-model="vm.cache.items" data-parent-folder-id="{{vm.parentId}}"> ,它仍会返回ui.item.sortable.droptarget.data("parentFolderId")

更新2:添加了plunker演示: http://plnkr.co/edit/14XfBOTFuJZ0oSy2ozqh?p=preview

10

app.js

<html ng-app="plunker">

  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <div class="xxx" data-parent="{{parentId}}"></div>
    <button ng-click="getParentId()">Get Parent Id</button>
    <br>
    <button ng-click="setParentId(15)">Set Parent Id to 15</button>
    <br>
    <button ng-click="getParentId()">Get Parent Id</button>
    <br>
    {{parentId}}
  </body>

</html>

按此顺序单击按钮时:var app = angular.module('plunker', []); app.controller('MainCtrl', function($scope, $element) { activate(); function activate() { $scope.parentId = 10; } $scope.setParentId = function(number) { $scope.parentId = number; } $scope.getParentId = function() { $scope.parentId = $($element).find('.xxx').data('parent'); } }); - Set - Get值成功更新。但是,当您单击另一个序列时:data - 出现与我之前的代码相同的问题 - 在获取值后使用新值更新值 - 旧值返回。

2 个答案:

答案 0 :(得分:0)

在angularJs中你不需要做所有jQuery的东西,因为模型会立即绑定到html元素。

实际上,使用angularJs你根本不需要jQuery。

您不必使用getParentId获取该属性的值,因为它已显示在您的{{parentId}}中。

该属性的范围包含在您的控制器MainCtrl中。

要了解绑定系统的确如何运作,您可以使用此plunker

如您所见,由于数据绑定,更改文本框中的值会更改{{parentId}}的值。

这是实现using ng-model="parentId"

答案 1 :(得分:0)

这个解决方案受到这个SO问题的启发: get wrong value in data attribute jquery

ui.item.sortable.droptarget.attr("data-parent-folder-id")

基本上讨厌的jQuery做什么 - 它缓存数据值然后只返回旧的...所以解决方案是根本不使用data方法:)

它是.data()的记录行为: http://api.jquery.com/data/#data-html5

  

数据属性第一次被拉入数据属性   访问,然后不再访问或变异(所有数据值   然后在内部存储在jQuery中。