Javascript Angularjs/Jquery数据()
如何以声明方式将任意数据附加到html元素并检索它 请看代码 Angular包含jQuery数据() 因此,我想将数据附加到模板中的每个Javascript Angularjs/Jquery数据(),javascript,jquery,angularjs,Javascript,Jquery,Angularjs,如何以声明方式将任意数据附加到html元素并检索它 请看代码 Angular包含jQuery数据() 因此,我想将数据附加到模板中的每个li元素(比如_data=node),然后使用 var li = elm[0].... console.log('li-', li.data('_data')) li - {id:1} 代码: 首先,如果您正试图与angular集成的是某个第三方库,这可能没问题,但现在您正在使用angular生成DOM,并在DOM中嵌入数据。这很奇怪 其次,您的test指令模
li
元素(比如_data=node),然后使用
var li = elm[0]....
console.log('li-', li.data('_data'))
li - {id:1}
代码:
首先,如果您正试图与angular集成的是某个第三方库,这可能没问题,但现在您正在使用angular生成DOM,并在DOM中嵌入数据。这很奇怪 其次,您的
test
指令模板使用ngRepeat
,这将创建隔离范围,您将无法以声明方式访问li
项。您将不得不使用DOM遍历,这也不是很有角度感
第三,视图应该通过angulars双向绑定绑定到模型。不要试图在上面模拟相反的行为。要么你不应该使用angular,要么你应该改变解决问题的方法,因为否则开发和维护它会很痛苦
如果你能描述一下你想要实现什么,以及为什么你需要在数据中使用这个模型,我会提供一个真实的答案。现在最简单的解决方案是放弃test
指令并将其改写为:
控制器的模板:
<ul>
<li ng-repeat="node in data" model-in-data="node">
<span class="span2">id - {{node.id}}</span>
</li>
</ul>
在这里,每个li
元素都将其模型添加到data
属性中。您编写的代码与data()没有任何关系那么,假设您还没有尝试过任何东西是否安全呢?我尝试过,但不确定以声明方式设置数据的语法是什么。我刚刚在jquery文档中看到了一个关于html5数据属性的部分,jquery将它拉了进来。我正在努力解决这个问题,您是否包含了jQuery?没有,但是angular通过其自己的实现jqlite支持data()。感谢您的详细回答和解释。你是对的,我试图合并一个第三方拖放插件,需要一种方法将一些数据附加到dom元素。这是为了跟踪它的来源,等等。我将查看您的代码。再次感谢您尽管使用拖放库(如jQuery的draggable、sortable等)并不容易,但肯定可以或多或少地以声明方式编写每个交互。请记住,您的模型应该已经定义了这些交互属性(位置、索引、列表父项等)。来自第三方库的任何操作或回调都应该更新angular的模型(而不是DOM!),然后angular应该根据更新重新提交视图。
template: '<li class="ch" ng-repeat="node in data" data-node="node">' +
elm[0].children[0].data()
elm.children[0].data()
etc..
<ul>
<li ng-repeat="node in data" model-in-data="node">
<span class="span2">id - {{node.id}}</span>
</li>
</ul>
.directive('modelInData', function($parse) {
return {
restrict: 'A',
link: function($scope, $element, $attrs) {
var model = $parse($attrs.modelInData)($scope);
$attrs.$set('data', model);
}
}
});