【问题标题】:“Cannot read property 'client' of undefined” angularJS with SignalR“无法使用 SignalR 读取未定义的属性‘客户端’” angularJS
【发布时间】:2017-01-26 20:12:25
【问题描述】:

我是 signalR 的新手。我正在做的是创建一个简单的应用程序,将名称添加到数据库并显示给客户端,但我收到错误“无法读取未定义的属性‘客户端’” 这是我的 angularJS 代码

     myApp.controller('firstController', function ($scope, $http) {
    $scope.saveName = function () {
        $http.post("/Name/saveName/", { userName: $scope.name }).then(function (response) {
            $scope.loadNames();
        })
    }
    $scope.loadNames = function () {
        $http.get("/Name/getName/").then(function (response) {
            $scope.nameList = response.data;
        })
    }
    $scope.loadNames();
    $scope.hub = $.connection.myHub;
    $scope.notify = function () {
        $scope.hub.client.UserAddHub = function (name) {
            $scope.$apply(function () {
                $scope.nameList.push(name);
            })
        }
        $.connection.hub.start();
    }
    $scope.notify();
});

这是我在服务器端写的

    private static IHubContext userHubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
operations op = new operations();
        op.save(userName);
        userHubContext.Clients.All.UserAddHub(userName);

这是我的中心类

[HubName("myHub")]
public class MyHub : Hub
{

}

我错过了什么吗?有什么建议吗?谢谢。

【问题讨论】:

  • 在你的 $scope.loadNames() 行之后,添加一个 console.log() 来查看 $scope.nameList 是什么(如果有的话)
  • 这是我在控制台中得到的 angular.js:14328 TypeError: Cannot read property 'client' of undefined at ChildScope.$scope.notify (myScript.js:20)
  • 对 SignalR 不太了解,但您的 $scope.hub 肯定是 null 不要浪费您的时间查看“客户端”。可能是 $.connection.myHub 无法正常工作。如果你想检查它,只需写 $scope.hub={};然后它会说 UserAddHub is undef
  • 我刚刚添加了#scope.hub={};但错误是一样的.. TypeError: Cannot read property 'client' of undefined

标签: .net angularjs signalr


【解决方案1】:

如果您使用外部脚本加载 signalR,请确保在您的 Layout.cshtml(或您正在使用的任何其他布局)中添加了此参考

<script src="~/signalr/hubs"></script>

在添加 signalR 之后。代码似乎没有任何问题,我只能看到您的集线器为空。

编辑:对于未来的读者,请仔细检查您是否已将 app.MapSignalR(); 添加到您的 Startup.cs 类中。

【讨论】:

  • 我添加了 但现在它抛出另一个错误.. 加载资源失败:服务器响应状态为 404(未找到)
  • 哪个资源?转到您的浏览器并查找 localhost:/signalr/hubs 和 CTRL+F 单词“myHub”,您应该在那里看到它。
  • localhost:port/signalr/hubs 我的意思是您运行应用程序的地址。也添加端口
  • 好的,我从你的回答中得到了一个线索并添加了 app.MapSignalR();到我的 startup.cs 。另外我还没有添加 。错误被删除。谢谢兄弟。
【解决方案2】:

在您的 $scope.hub 行之后添加:

$scope.hub.client = {};

还注意到你调用了 $.connection.myHub;然后稍后你在 $.connection.hub 上调用 start() 方法......应该是 $.connection.myHub.start();或者应该是 $scope.hub.start(); ?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 2021-04-12
    相关资源
    最近更新 更多