javascript - Angular/Socket.io/HTML/从 HTML 中的 <script> 内调用 Controller 的函数

标签 javascript html angularjs function socket.io

我正在尝试从我的index.html 中的脚本标记内调用 Controller 的函数。

<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 Controller 中定义的。显然,因为我将该 Controller 附加到按钮,所以我可以调用该函数。

问题是;如何从我的 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;博士)

总结: 如何使我的应用程序中的函数可用于我的 html,以便每当触发 socket.on('whatever') 时,都会调用该函数?我不在乎该功能是否在工厂、服务、 Controller 中,对我来说并不重要。我只需要在通过 socket.io 从服务器接收到这些变量时更新应用程序中的一堆变量

最佳答案

在您的脚本中,您可以执行以下操作

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

在你的 Controller 中你可以只监听事件。

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

希望有帮助。

关于javascript - Angular/Socket.io/HTML/从 HTML 中的 &lt;script&gt; 内调用 Controller 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32725564/

相关文章:

html - 防止 HTML 标签之间的中断,同时允许在其中一个标签内中断

javascript - 在 ngTables 中,第三次运行 $scope.tableParams.reload() 导致 TypeError : Cannot set property '$data' of null

angularjs - 从 AngularJS 过滤器获取货币格式模式

javascript - 如何使用 React-Leaflet 获取标记集合的边界

javascript - CORS 预检响应错误

javascript - 以表格形式显示选项中的选定值

html - 固定宽度和流体 div 与 bootstrap 3.0 并排

javascript - AngularJS 是否重用观察者?

javascript - 如何防止发送 ajax 调用两次

javascript - Document.querySelector 返回 null 直到使用 DevTools 检查元素