将数据从jQuery发送到AngularJS的控制器

时间:2015-05-20 06:33:56

标签: javascript jquery angularjs

我想将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);
    };

1 个答案:

答案 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;
                }