繁体   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