我想将jQuery生成的数据传递给AngularJS的控制器。有没有办法做到这一点。
<textarea ng-click="showSelectedText(selection.text)" name="editor1" id="editor1" cols="118" rows="35">
jQuery收集数据:
$( "#editor1" ).select(function() {
var selection = getSelected()
if(selection)
{
alert(selection);
}
});
function getSelected() {
if (window.getSelection) {
return window.getSelection();
}
else if (document.getSelection) {
return document.getSelection();
}
else {
var selection = document.selection && document.selection.createRange();
if (selection.text) {
return selection.text;
}
return false;
}
return false;
}
AngularJS的控制器:
$scope.showSelectedText = function(fromUI) {
alert("Text is : "+ fromUI);
};
答案 0 :(得分:2)
您需要进行一些更改。比如给你定义控制器的元素赋予一个id,比如
<div id="demoElement" ng-app='MyModule' ng-controller="MyController">
</div>
在您的控制器中保持此功能相同。即
$scope.showSelectedText = function(fromUI) {
alert("Text is : "+ fromUI);
};
现在你可以从textarea中删除ng-click =“showSelectedText(selection.text)”,并使用下面的行从你的jquery代码中调用angular的函数。
angular.element(document.getElementById('demoElement')).scope().showSelectedText(jQueryObjectOfSelectedText);
您可以从jQuery代码中调用此函数,您可以在其中获取所选文本,例如
$( "#editor1" ).select(function() {
var selection = getSelected()
if(selection)
{
angular.element(document.getElementById('demoElement')).scope().showSelectedText(selection);
}
});
function getSelected() {
if (window.getSelection) {
return window.getSelection();
}
else if (document.getSelection) {
return document.getSelection();
}
else {
var selection = document.selection && document.selection.createRange();
if (selection.text) {
return selection.text;
}
return false;
}
return false;
}