簡體   English   中英

Angular / Socket.io / HTML /從WITHIN調用控制器函數<script> in HTML

[英]Angular / Socket.io / HTML / Calling a Controller's Function from WITHIN <script> in HTML

我正在嘗試從index.html中的腳本標簽內調用控制器的功能。

<script>
    var socket = io.connect('192.168.1.103:3000');
    socket.emit('pusharduino', "SOCKET DATA FROM ANGULAR");
    socket.on('pushangular', function (data) {
        testFunction();
    });
</script>

<button ng-controller="BaseCtrl" ng-click="testFunction()"></button>

socket.io連接工作正常。 它連接到我的服務器,無論何時以任何一種方式發出任何信號,它都認為正常。 問題是“ testFunction()”沒有明顯定義。

它正下方的按鈕可以正常工作! “ testFunction()”函數在我的應用程序的BaseCtrl控制器中定義。 顯然,由於我將該控制器附加到了按鈕上,因此可以調用該函數。

問題是; 如何在我的socket.io腳本中調用相同的函數? 還是有任何腳本標簽可以解決此問題? 甚至不需要是socket.io,僅是socket.io是此特定事件的觸​​發器。

我認為這是一個范圍問題,該腳本顯然無權訪問BaseCtrl。 我可以打印出app.js中的全局變量。

我嘗試過的事情: -將BaseCtrl附加到腳本標簽。 -在各處使用$ scope。 -以我能想到的所有方式引用testFunction()。

BaseCtrl的代碼

angular.module('yapp')
 .controller('BaseCtrl', function($scope) {

   $scope.testFunction = function() {
     console.log("testFunction() has been called!);
   }

});

-------------------------------------------------- --------------------------

(tl; dr)

總結:如何在我的應用程序中為HTML提供可用的函數,以便每當socket.on('whatever') ,都會調用該函數? 我不在乎該功能是在工廠,服務,控制器中,對我而言都無關緊要。 每當通過socket.io從服務器接收到它們時,我只需要更新應用程序中的一堆變量即可

在腳本中,您可以執行以下操作

var parentScope = window.parent.angular.element(document.body).scope();
parentScope.$emit("MyEvent", { payload: "MyPayload"});

在您的控制器中,您可以只聽事件。

$scope.$on("MyEvent", function (evt, args) {
//arg is your payload
}

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM