2016-11-21 104 views
-1

我想從我的JavaScript調用一個角度控制器。這是我第一次使用Angular做任何事情,而且我有點失落!從jquery/javascript角度調用函數 - 屬性undefined error

我已經按照這個例子:

http://dotnet-concept.com/Tips/2015/6/5798829/How-to-call-angularJS-function-from-javascript-jquery

但我發現了這個錯誤:

Uncaught TypeError: Cannot read property 'TestAngularMethod' of undefined(…)

起初我有我自己的代碼在那裏,但我已經剝奪它所有的嘗試,並得到這個例子首先工作,但我沒有任何運氣。

任何人都可以看到我要去哪裏錯了嗎?

HTML

<div class="continueClass" id="divID" runat="server" ng-controller="TestController" ng-if="payment.type == 'PayPal' || payment.type == 'WorldPay'"> 
     <asp:Button runat="server" Text="Continue" OnClick="Continue_Click"/> 
    </div> 

ANGULAR

var myApp = angular.module('myApp', []); 

    myApp.controller('TestController', ["$scope", function ($scope) { 
     $scope.TestAngularMethod = function() { 
      alert('Hello you are calling angular js method.'); 
     } 
    }]); 

的JavaScript

angular.element(document.getElementById('divID')).scope().TestAngularMethod(); 

我已經看了這些不在搞清楚我自己的問題,如果幸運的話:

Call angularjs function using jquery/javascript

AngularJS. How to call controller function from outside of controller component

Call Angular Function with Jquery

謝謝!

+1

爲什麼你需要無論如何要做到這一點?您通常不應該從控制器外部調用控制器函數,並且可能有更好的解決方案適用於您要執行的任何操作 – Fissio

+0

我有一個遺留的ajax調用,當它成功時,它會附加到頁面。我需要能夠檢查該ID是否存在,然後調用角度控制器 – hlh3406

+0

爲什麼要投票? – hlh3406

回答

2

儘管@Fissio是正確的...你可以試試這個代碼:

EDITED

JAVASCRIPT

var scope = angular.element('[id=divID]').scope(); 

if(scope){ //check whether the div exist 
    scope.TestController.TestAngularMethod(); //should execute your method 
} 
else{ 
    /* code if scope doesn't exist, div, probably removed because 
    payment.type == 'PayPal' || payment.type == 'WorldPay' is probably false /* 
} 
+0

我得到同樣的錯誤很遺憾:/ – hlh3406

+0

剛剛意識到這是不完全一樣的:遺漏的類型錯誤:無法讀取的未定義的屬性「的TestController」(...) – hlh3406

+0

請檢查HTML的Web瀏覽器,並驗證與'ID的DIV =「divID」在那裏。請注意,如果條件'ng-if =「payment.type =='PayPal'|| payment.type =='WorldPay'」'爲'false',那麼div將從DOM中移除,您可能會獲得那個錯誤。 看到我的回答編輯。 – lealceldeiro