无法弄清楚如何使用$ scope。$ watch

Therebelcoder

如果有一个应用程序控制器。在此控制器中,我称为“ saveGame”的资源服务。saveGame具有一个称为“ resolved”的属性。我用false初始化此属性当promise解析(加载保存游戏)时,我将resolveed属性设置为true

以上部分的作品。

现在,我在MainCtrl中注入saveGame服务。如果我在本地运行代码,那么它可以工作,因为saveGame几乎可以立即解析。但是,如果我打开延迟-模拟非常慢的连接。saveGame无法及时解决,我需要等待。

这是我的代码:

application
    .controller('MainCtrl',
        ['$scope', 'saveGame', function ($scope, saveGame) {
            'use strict';

            // At this point the savegame should be resolved
            // If not we need to wait for it.
            $scope.$watch(saveGame.resolved, function ( newVal, oldVal) {
                console.log( newVal + '-' + oldVal ); // #1
                if(newVal !== undefined ){
                    //do your stuff here...
                    console.log("do your stuff"); // #2
                }
            });

因此,#1处newValoldVal以未定义的形式出现。#2的控制台日志从不触发。

为了完整起见,我的saveGame服务如下所示:

application
    .factory('saveGame',
        ['$resource', 'config', function ($resource, config) {
            'use strict';

            var _resolved = false;
            var _location = {};

            var _load = function (playerId) {
                var res;
                if (config.getSetting('use-mockup')) {
                    // Use mockup data
                    // $resource returns a class representation
                    res = $resource('data/mockup/savegame/player:id.json');
                } else {
                    // TODO: Use real API
                }
                // This will return a promise!
                return res.get({id: playerId}).$promise;
            };

            var _save = function (stuff) {
                return stuff;
            };

            return {
                load: _load,
                save: _save,
                location: _location,
                resolved: _resolved
            };
        }]);

而我的appCtrl中的部分是这样的:

// Load the savegame resource
            var promise = saveGame.load(1); // PlayerId
            promise.then(function (resource) {
                // savegame resource was loaded and resolved
                saveGame.location = resource.location;
                saveGame.resolved = true;
            });

所以我知道我做错了什么,但我不知道该怎么办?同样的帮助将不胜感激。

沙里科夫·弗拉迪斯拉夫

你需要这个:

        $scope.$watch(function () { return saveGame.resolved; }, function ( newVal, oldVal) {
            console.log( newVal + '-' + oldVal ); // #1
            if(newVal !== undefined ){
                //do your stuff here...
                console.log("do your stuff"); // #2
            }
        });

您必须将字符串用作带有返回值的watch或function的第一个参数。如果使用字符串“ abc”,则AngularJS比较将$scope.a.b.c在当前循环和下一个循环中进行比较如果在那里使用函数,AngularJS将比较函数的结果。

可能更好的方法是更新saveGame服务并在其中返回承诺。在需要saveGame结果的任何地方,都将使用以下代码:

module.factory('saveService', ['$http', function ($http) {
    return {
        doSave: function () {
            return $http.get(params);
        }
    }
}])

module.controller('MainCtrl', ['saveService', function (saveService) {
    saveService.doSave().then(function onSuccess() {
        // handle something after save
    });
}])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用`this。$ watch`代替`$ scope。$ watch`和'Controller As'

来自分类Dev

$scope.$watch 如何工作

来自分类Dev

使用$ scope。$ watch的迭代错误

来自分类Dev

无法弄清楚为什么Ninject Named Scope无法按预期工作

来自分类Dev

无法弄清楚为什么Ninject Named Scope无法按预期工作

来自分类Dev

如何在TypeScript上使用$ scope。$ watch

来自分类Dev

使用scope。$ watch观察函数何时执行

来自分类Dev

$ scope。$ watch在Angular中无法在Ionic / Cordova中使用

来自分类Dev

无法弄清楚如何使用Soundcloud API测试代理

来自分类Dev

无法弄清楚如何使用ImageViewTouch挂钩

来自分类Dev

无法弄清楚如何使用getchar(); 在C

来自分类Dev

无法弄清楚如何使用getchar(); 在C中

来自分类Dev

无法弄清楚如何为我的函数使用参数

来自分类Dev

JAXB-无法弄清楚如何正确使用refID

来自分类Dev

无法弄清楚如何使用西班牙口音

来自分类Dev

无法弄清楚如何使用lighttpd接收HTTP请求

来自分类Dev

无法弄清楚如何使用 OfficeExtension.Promise

来自分类Dev

在控制器中使用`this`范围时使用$ scope。$ watch

来自分类Dev

如何轻松确定$ scope。$ watch中添加/删除的内容?

来自分类Dev

如何检测$ scope。$ watch中已删除的项目?

来自分类Dev

AngularJS:使用$ scope。$ watch与控制器作为语法

来自分类Dev

尝试将$ scope。$ watch与controllerAs一起使用

来自分类Dev

$ scope。$ watch使用Angular和Ionic / Cordova的div标签

来自分类Dev

angularjs指令未使用scope。$ watch进行更新

来自分类Dev

无法弄清楚如何<s:select>

来自分类Dev

无法弄清楚如何收税

来自分类Dev

无法弄清楚如何捕获InputMismatchException

来自分类Dev

无法弄清楚如何打印toString

来自分类Dev

iOS限制-无法弄清楚如何

Related 相关文章

  1. 1

    使用`this。$ watch`代替`$ scope。$ watch`和'Controller As'

  2. 2

    $scope.$watch 如何工作

  3. 3

    使用$ scope。$ watch的迭代错误

  4. 4

    无法弄清楚为什么Ninject Named Scope无法按预期工作

  5. 5

    无法弄清楚为什么Ninject Named Scope无法按预期工作

  6. 6

    如何在TypeScript上使用$ scope。$ watch

  7. 7

    使用scope。$ watch观察函数何时执行

  8. 8

    $ scope。$ watch在Angular中无法在Ionic / Cordova中使用

  9. 9

    无法弄清楚如何使用Soundcloud API测试代理

  10. 10

    无法弄清楚如何使用ImageViewTouch挂钩

  11. 11

    无法弄清楚如何使用getchar(); 在C

  12. 12

    无法弄清楚如何使用getchar(); 在C中

  13. 13

    无法弄清楚如何为我的函数使用参数

  14. 14

    JAXB-无法弄清楚如何正确使用refID

  15. 15

    无法弄清楚如何使用西班牙口音

  16. 16

    无法弄清楚如何使用lighttpd接收HTTP请求

  17. 17

    无法弄清楚如何使用 OfficeExtension.Promise

  18. 18

    在控制器中使用`this`范围时使用$ scope。$ watch

  19. 19

    如何轻松确定$ scope。$ watch中添加/删除的内容?

  20. 20

    如何检测$ scope。$ watch中已删除的项目?

  21. 21

    AngularJS:使用$ scope。$ watch与控制器作为语法

  22. 22

    尝试将$ scope。$ watch与controllerAs一起使用

  23. 23

    $ scope。$ watch使用Angular和Ionic / Cordova的div标签

  24. 24

    angularjs指令未使用scope。$ watch进行更新

  25. 25

    无法弄清楚如何<s:select>

  26. 26

    无法弄清楚如何收税

  27. 27

    无法弄清楚如何捕获InputMismatchException

  28. 28

    无法弄清楚如何打印toString

  29. 29

    iOS限制-无法弄清楚如何

热门标签

归档