我使用文件夹和子文件夹实现了一些FilePanel。
通过Chrome开发者工具,我可以看到ui.item.sortable.droptarget
具有data
的{{1}}属性,但是当我尝试在代码中访问它时(通过jquery parent-folder-id == 2
方法)它返回10(我最近的另一个文件夹' s的值)。
为什么它没有更新?当我移动到另一个文件夹时 - 根据该文件夹的服务器值分配data
的新值。 DOM正确更新...
vm.parentId
稍后添加:
即使我将.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
- 出现与我之前的代码相同的问题 - 在获取值后使用新值更新值 - 旧值返回。
答案 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中。