Angularjs ng使用Parse.Cloud.run()重复绑定中断

Angularjs ng使用Parse.Cloud.run()重复绑定中断,angularjs,data-binding,parse-platform,angularjs-ng-repeat,Angularjs,Data Binding,Parse Platform,Angularjs Ng Repeat,总结问题: 使用AngularJS 1.3.15 使用Parse.com库1.4.2 当底层结构更新时,绑定到我的控制器的屏幕上的输出未更新 我的HTML很简单-我使用ng repeat从控制器中的数组输出字符: <body ng-controller="MainCtrl as main"> <div ng-repeat="char in main.chars"> {{char}} </div> </body>

总结问题:

  • 使用AngularJS 1.3.15
  • 使用Parse.com库1.4.2
  • 当底层结构更新时,绑定到我的控制器的屏幕上的输出未更新

我的HTML很简单-我使用
ng repeat
从控制器中的数组输出字符:

<body ng-controller="MainCtrl as main">

    <div ng-repeat="char in main.chars">
        {{char}}
    </div>
</body>
app.controller('MainCtrl', ['httpFactory', 'parseFactory', function(httpFactory, parseFactory){
    var main = this;
    main.chars = ["I", "n", "i", "t"];

    // httpFactory.getArray().then(function(arrHttp){
    //     main.chars = arrHttp;
    //     console.log("HTTP --> " + main.chars);
    // });

parseFactory.getArray().then(function(arrParse){
    main.chars = arrParse;
    console.log("PARSE -> " + main.chars);
});
注意,在这个例子中,我在承诺中返回硬编码的值,以排除Web服务本身的任何问题

解析云函数没有什么特别之处。它来自基本模板-函数
hello
正确返回预期的“hello,world!”


我的控制器,
MainCtrl
非常简单。我用一个初始值实例化
chars
数组

我依次调用每个factory服务,使用返回值更新我的
chars
数组,更新完成后我将其注销

调用httpFactory.getArray(),因为它完全按照预期工作:

  • chars
    数组已正确更新
  • 绑定HTML显示更改(从“Init”更改为“Yes”)
  • 控制台日志输出为“HTTP-->Y、e、s”
  • 我已经将其注释掉,以排除此代码块中的任何交互
parseFactory.getArray()
的调用基本上按照预期工作:

  • chars
    数组已正确更新
  • 控制台日志输出为“解析->N,o”
但绑定的HTML显示不会更改。

这是我的控制器:

<body ng-controller="MainCtrl as main">

    <div ng-repeat="char in main.chars">
        {{char}}
    </div>
</body>
app.controller('MainCtrl', ['httpFactory', 'parseFactory', function(httpFactory, parseFactory){
    var main = this;
    main.chars = ["I", "n", "i", "t"];

    // httpFactory.getArray().then(function(arrHttp){
    //     main.chars = arrHttp;
    //     console.log("HTTP --> " + main.chars);
    // });

parseFactory.getArray().then(function(arrParse){
    main.chars = arrParse;
    console.log("PARSE -> " + main.chars);
});

根据文档,
Parse.Cloud.run()
。从控制台日志输出来看,情况似乎就是这样

但是绑定的输出不会更新

这是AngularJS、Parse的问题还是我使用它们的方式的问题?


更新 我已将此问题作为一个错误记录在Parse中。将根据他们的反馈更新此帖子


我不理解这种奇怪的行为,但在
MainCtrl
控制器中添加
$scope
依赖项后,绑定开始工作

代码

app.controller('MainCtrl', ['httpFactory', 'parseFactory', '$scope',
  function(httpFactory, parseFactory, $scope) {

不要调用
Parse.Cloud.run()

它们给出了以下示例代码:

curl -X POST \
  -H "X-Parse-Application-Id: 4vwhWtM5Sf3ExRvXMkRI04jJj8r2ZETuBQYhiYGo" \
  -H "X-Parse-REST-API-Key: EX6MWjSEblsrHsJCqBZ1AevuTKz0ZlWLHPMloZqD" \
  -H "Content-Type: application/json" \
  -d '{}' \
  https://api.parse.com/1/functions/hello
基于此,我修改了
parseFactory
以使用
$http
而不是
Parse.Cloud.run()


这完全符合预期。

有趣的是,我让Plunker使用原始代码?!添加
$scope
后,它开始工作,删除
$scope
后,它继续工作。你认为这可能取决于浏览器吗?我用的是Chrome,但试过IE,运气不好;两种方法都不起作用。看起来它在Plunker中工作,但在真正的浏览器中不起作用;添加
$scope
没有帮助。每当我站在machinenote面前时,我都会查看它——当我用$http调用他们的API时,一切都正常。表明解析本身存在问题,不确定是否值得在这方面花费太多时间,除非您真的想。您是否觉得
Parse.Cloud.run()
@pankajparkar有问题,这是我的看法。工作代码和中断代码之间的唯一区别是
Parse.Cloud.run()