Angular / Socket.io / HTML / 在 HTML 中从 <script> 内部调用控制器的函数
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
}
希望对您有所帮助。
我正在尝试从我的 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
}
希望对您有所帮助。