Angular js是否与jquery的multiselect不兼容?
Is Angular js incompatible with jquery multiselect
我有这个jQuery选择器。一切工作正常,但只是通过添加和初始化角,多选停止工作。你可以试着删除所有不需要的东西,你会看到这样的结果:
(我不知道为什么github的url在这里不起作用,但如果需要,您可以下载文件,因为这不是我试图描述的问题)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>SPIROOX - Campaigns</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" type="text/css" />
<link rel="stylesheet" href="bootstrap-multiselect/dist/css/bootstrap-multiselect.css" type="text/css" />
</head>
<body ng-app="campaign_listing">
<div class="content" ng-controller="campaign_list_controller as ctrl">
<h2>Campaign Administration</h2>
<a href="" class="btn_new">+</a>
<div class="filters">
<select id="multiselect_status" ng-model="ctrl.filters.status" ng-change="ctrl.update_fields()" multiple="multiple">
<option value="active">Active</option>
<option value="suspended">Suspended</option>
<option value="closed">Closed</option>
</select>
</div>
</div>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<script type="text/javascript" src="bootstrap-multiselect/dist/js/bootstrap-multiselect.js"></script>
<script>
$(document).ready(function() {
$('#multiselect_status').multiselect({
includeSelectAllOption: true,
enableFiltering: true,
nonSelectedText: 'Status'
});
});
</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular.js"></script>
<script>
var my_app = angular.module("campaign_listing", []);
var controllers = {};
controllers.campaign_list_controller = function($http) {
this.filters = {
status: 'active',
client: null
};
var campaigns = {};
this.update_fields = function() {
console.log("update!");
console.log(this.filters);
}
}
my_app.controller(controllers);
</script>
</body>
</html>
正如评论中提到的,在指令中添加jQuery插件代码,并删除document.ready
的东西,因为它不需要在指令中。当你在指令的link方法中添加插件代码时,DOM就准备好了。
我还没有测试你的角代码的其余部分,因为它看起来太复杂,我已经重新编码,以提高可读性。(也许你的代码是工作的,但我不会这样写。)
请看看下面的演示或在这个文件。
更新29.09.15
为了更好地理解指令,请阅读关于指令的文档来获取自定义指令的基础知识。
无论如何,下面是对指令的解释:
multiselect
指令作为属性指令(restrict: 'A'
)添加到select标签,因此链接函数中的元素是选择标签,您想在其中应用jQuery插件。(链接内部使用jQuery函数是安全的,但我建议减少使用到最低限度。)
搜索link, compile, controller
在谷歌或这里在SO了解更多关于指令。这里有一个问题是关于它们之间的区别。
你也可以用template创建一个元素指令,然后你可以将select标签添加到指令中,并通过双向绑定传递你的选择。这可能更好,因为它更容易重复使用。
angular.module('campaignListing', [])
.controller('CampaignListController', CampaignListController)
.directive('multiselect', MultiSelectDirective);
function CampaignListController($http) {
this.filters = {
status: 'active',
client: null
};
var campaigns = {};
this.update_fields = function () {
console.log("update!");
console.log(this.filters);
}
}
function MultiSelectDirective() {
return {
restrict: 'A',
link: function (scope, element) {
$(element).multiselect({
includeSelectAllOption: true,
enableFiltering: true,
nonSelectedText: 'Status'
});
}
}
}
<link href="https://cdn.rawgit.com/davidstutz/bootstrap-multiselect/master/dist/css/bootstrap-multiselect.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/davidstutz/bootstrap-multiselect/master/dist/js/bootstrap-multiselect.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.6/angular.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<div ng-app="campaignListing">
<div>
<div class="content" ng-controller="CampaignListController as ctrl">
<h2>Campaign Administration</h2>
<a href="" class="btn_new">+</a>
<div class="filters">
<select id="multiselect_status" multiselect ng-model="ctrl.filters.status" ng-change="ctrl.update_fields()" multiple="multiple">
<option value="active">Active</option>
<option value="suspended">Suspended</option>
<option value="closed">Closed</option>
</select>
</div>
</div>
</div>
</div>
相关文章:
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- CKJustify和Color Button插件之间的不兼容
- 在不兼容的接收器上调用的方法Set.prototype.add未定义
- 如果不兼容,则隐藏范围输入
- 谷歌图表 - 地理图表“不兼容的数据表:错误:未知地址类型
- IE11真的与getNamedItem()JS函数不兼容吗
- 与您的操作系统或体系结构不兼容:fsevents@1.0.11.
- jQuery脚本滚动在iDevices上不兼容
- three.js javascript/raycasting代码与retina显示器Mac不兼容
- TypeScript无效的重载签名-与实现不兼容
- PHP JSON编码输出与Javascript Ajax不兼容
- ACE编辑器applyDeltas似乎与setTimeout不兼容
- Element.insertAdjacentHTML与引导程序类之前和之后的::不兼容
- Geocoding和Animation.drop与超时不兼容
- 如何让我的html5功能不兼容警告使用javascript工作
- 不兼容的数据表: 错误:表包含的列数超过预期
- HTML5 不兼容的浏览器测试
- 有什么方法可以将类型指定为 self?或解决方法“属性类型不兼容”
- React 15 与 React-redux 不兼容
- Angular js是否与jquery的multiselect不兼容?