2015-03-08 69 views
0

我有件這樣的:如何使用非Angular javascript觸發角度ng點擊?

<button ng-click="xyzfunction.vote(true)" class="primary"> 

我想觸發從角的世界之外ng-click屬性指定的函數。我怎麼能這樣做?

顯然,我不能僅僅調用xyzfunction.vote(true),因爲它沒有全局定義。但它被定義在某處(在某些控制器中)。我怎麼稱呼它?

對於更廣闊的背景:我想調用這個函數在Greasemonkey的腳本

+0

你的問題是非常糟糕的措辭。首先,你忘了添加AngularJS標籤,我添加它,然後我嘗試回答你的問題,然後,你也忘了添加你想要的Greasemonkey環境中的答案... – 2015-03-08 22:35:52

+0

是的,我的歉意 – user3255765 2015-03-08 22:39:22

+0

所以這不是關於angular或'ng-click',但是如何在Greasemonkey的HTML頁面上觸發一個按鈕? – Claies 2015-03-08 23:03:18

回答

0

可以使用angular.element$scope得到來自外部的角度範圍:

var elem = document.querySelector(".controller-element"); 
angular.element(elem).$scope().xyzfunction.vote(); 

OFC .controller需要被取代用選擇器解析爲具有相應範圍的元素。

-1

您可以創建一個全局對象保持功能和角和Greasemonkey的重用:

mynamespace.js:

var MYNAMESPACE = { 
    xyzfunction: { 
    vote: function (boolan) { 
     // your vote function here 
    } 
    } 
} 

mynamespaceFactory.js

angular.module('myapp', []).factory('MyNameSpace', ['$window', function ($window) { 
    return $window.MYNAMESPACE; 
}]); 

controller.js

angular.module('myapp').controller('YourController', ['MyNameSpace', function (MyNameSpace) { 
    $scope.xyzfunction = MyNameSpace.xyzfunction; 
}]); 

greasemonkey.js:

MYNAMESPACE.xyzfunction.vote(true); 

爲了改善這一點,使用一個強大的namespacing pattern來創建全局對象。

0

比方說你有以下的HTML:

<div class="wrapper" ng-controller="MyController" id="MyContainer"></div> 

然後執行以下辦法從角範圍外部訪問控制器的功能。

angular.element('#MyContainer').scope().yourFunction();