Javascript 如何在Jquery中访问AngularJS?

Javascript 如何在Jquery中访问AngularJS?,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,最近我开始将AngularJS集成到项目中。 在此之前,我已经用JavaScript编写了许多原型和单个函数,例如(Node.js+socket.io功能) 今天,我无法用清晰的JavaScript与AngularJS通信: JS: socket.on('message', function (data) { showSystemMessage(); } function showSystemMessage(message) { // Increment here Angu

最近我开始将AngularJS集成到项目中。 在此之前,我已经用JavaScript编写了许多原型和单个函数,例如(Node.js+socket.io功能)

今天,我无法用清晰的JavaScript与AngularJS通信:

JS:

socket.on('message', function (data) {
     showSystemMessage();
}

function showSystemMessage(message) {
     // Increment here AngularJS $scope.messagesCnt++ ?;
}
.controller('MessagesController', ['$scope', function($scope) {
    $scope.messagesCnt = 0;
}])
AngularJS:

socket.on('message', function (data) {
     showSystemMessage();
}

function showSystemMessage(message) {
     // Increment here AngularJS $scope.messagesCnt++ ?;
}
.controller('MessagesController', ['$scope', function($scope) {
    $scope.messagesCnt = 0;
}])
HTML:

{{messagesCnt}

请注意方法:
showSystemMessage()
如果您的函数
showSystemMessage
不在控制器作用域内,则无法更新作用域变量
messagesCnt
。(有,但不是直截了当的。)


相反,您的这个函数应该驻留在angular服务中,然后在任何您想要的事件中,您都可以从您的服务向控制器广播一条消息以更新其计数值。

理想情况下,您应该遵循@Yaseer所说的,但我知道,您使用的是Socket IO本机实现[周围没有棱角分明的包装物]

因此,您有两种解决方案:

  • 使用

  • 从本机javascript访问角度控制器:

  • 为此,您必须具有标识符ID的元素。然后您可以使用该ID访问关联的作用域

    angular.element("#your-identifier-id-here").scope().messagesCnt++;
    

    在控制器中编写套接字侦听器代码

    function appcontroller($scope){
    
       socket.on('message', function (data) {
        showSystemMessage();
       }
    
       function showSystemMessage(message) {
          $scope.$apply(function(){
          // Increment here AngularJS $scope.messagesCnt++ ?;
        });
       }
    }
    

    您是否收到任何错误?角度文件中是否定义了
    showSystemMessage()
    ?否则它将无法访问
    $scope