AngularJS在指令中包装jQuery插件时出错
AngularJS error when wrapping jQuery plugin in a directive
我正在为AngularJS构建一个可标记元素并利用TagsInput的指令
这是一个工作小提琴:http://jsfiddle.net/mgLss/
不知道为什么,但当我添加该指令到我的应用程序它工作正常,但任何其他低于它运行的角失败,我得到这个错误信息:
Error: node is undefined
compositeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:3837
compositeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:3837
nodeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:4216
compositeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:3834
compositeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:3837
compositeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:3837
compositeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:3837
nodeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:4216
compositeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:3834
compositeLinkFn@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:3837
compile/<@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:3746
bootstrap/</<@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:932
Scope.$eval@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:7808
Scope.$apply@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:7888
bootstrap/<@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:930
invoke@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:2788
bootstrap@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:929
angularInit@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:904
@http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js:14397
f.Callbacks/o@http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js:2
f.Callbacks/p.fireWith@http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js:2
.ready@http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js:2
B@http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js:2
我花了一个小时在IRC上,但没有得到任何回复,所以希望Stack能来拯救我,就像它以前很多次一样。
这与你正在使用的插件有关,它以一种angular不喜欢的方式操纵dom,我没有进入源代码点你到问题的根源,说实话。但是这里有一个方法(一个丑陋的方法)来修复它。
<div ng:controller="TestCtrl">
{{ hello }}
<div><taggable default="changed"></taggable></div>
</div>
将该指令包装到另一个DOM元素中,确保插件是隔离的。
http://jsfiddle.net/mgLss/33/基于@fastreload的答案,一个稍微不那么难看的解决方案,它不需要更改HTML:
// as per @fastreload, wrap input in a div to prevent Angular from getting confused
template: "<div><input type='"text'"></div>",
link: function(scope, elm, attrs) {
elm.children().tagsInput({ // note children()
你还应该把Angular放在最后(在Manage Resources下)(通常在你的代码中),然后elm
自动成为一个被包装的jQuery元素,而不是一个被包装的Angular元素,因此我们不需要在link函数中使用$(elm)
。
相关文章:
- Chrome扩展插件:runtime.last运行tabs.get/tabs.remove时出错:没有id为0的选项卡
- 在使用 jQuery printElement 插件时出错
- 用于更改屏幕方向的phonegap插件出错
- 带有html Webpack插件的Webpack,全局安装时出错
- 动态 CRM 2011 注册插件时出错
- 在 jQuery 插件中调用函数时出错
- 在 Ember 插件中导入配置文件时出错
- 在使用PhoneGap VideoPlayer插件在PhoneGap Android中播放视频时出错
- docpad插件gullow出错
- 加载插件时出错
- bootstrap 2.0 bootstrap-dropdown.js在我将其添加到js插件列表时出错
- 在NPObject - Firefox插件上调用方法出错
- ReferenceError: jQuery is not defined"选择的Jquery插件出错
- 加载aurelia-validation插件时出错
- 在firefox扩展中使用Jstree插件时出错
- bgiframe插件导致IE9出错
- 使用带有wordpress插件的Jquery序列化表单时出错
- Wordpress的cookie法律信息插件出错
- jquery 插件出错
- ionic 上的$cordovaSQLite插件出错