在AngularJS的controller外部直接獲取$scope


為了防止無良網站的爬蟲抓取文章,特此標識,轉載請注明文章出處。LaplaceDemon/SJQ。

http://www.cnblogs.com/shijiaqi1066/p/5560843.html

 

 

 

以前利用webqq的寫過一個自動發消息的腳本,由於那時webqq還直接使用類似jQuery操作DOM的技術,所以腳本很簡單就可以實現。

現如今很多web應用都開始使用AngularJS,MVVM導致的就是無法操作dom而去直接改變數據。所以面對網頁版微信,要實現一個自動發送的腳本,就無法再用以前那套DOM的思路了。


 

要修改AngularJS中的數據,首先就要獲取scope。其實獲取scope的方法很簡單。

由於大部分Angular項目需要使用jQuery作為補充。可以在jQuery中通過.scope()方法獲取當前選擇器內容里繼承的域。

即類似這樣的方式:

$('div[ng-controller="listController"]').scope();

例:完整的例子。

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
    <meta charset="UTF-8">
    <title>Get angular's scope in jQuery</title>
    <script src="http://cdn.bootcss.com/jquery/2.1.4/jquery.js"></script>
    <script src="http://cdn.bootcss.com/angular.js/1.4.3/angular.js"></script>
    <script>
        angular.module('app',[])
                .controller('listController',['$scope', function ($scope) {
                    $scope.list = [1,2,3,4,5];
                    $scope.test = function () {
                        console.log('test');
                    }
                }])
    </script>
    <script>
        $(document).on('ready', function () {
            var controllerScope = $('div[ng-controller="listController"]').scope();  // Get controller's scope
            controllerScope.test(); // log 'test'
            console.log(controllerScope.list); // log [1,2,3,4,5]
            $('button').click(function (e) {
                var scope = $(e.target).scope();
                console.log(scope.item) // log item number
                scope.test(); // log 'test'
            })
        })
    </script>
</head>
<body>
<div ng-controller="listController">
    <ul>
        <li ng-repeat="item in list"><button>Select {{item}}</button></li>
    </ul>
</div>
</body>
</html>

 

那么打開網頁版微信的頁面(2016-06-05)選中你需要發消息的人。然后執行如下腳本:

var controllerScope = $('div[ng-controller="chatSenderController"]').scope();    // 獲取chatSenderController的$scope
controllerScope.editAreaCtn = "星哥,下午好";    // 設置需要發送的消息。即設置$scope某個屬性的值。

//  觸發“發送按鈕”的點擊事件。
$(".action a").trigger("click");

 

非常好的“外掛方式”。

 

 

 

為了防止無良網站的爬蟲抓取文章,特此標識,轉載請注明文章出處。LaplaceDemon/SJQ。

http://www.cnblogs.com/shijiaqi1066/p/5560843.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM