角度UI路由器视图的控制器会导致$ scope。$ watch不触发吗?

福图纳

要解释该问题,请查看以下内容states

.state('app.play.lobby', {
            url: '/lobby',
            resolve: {
                games: function (FirebaseAdapter) {
                    return FirebaseAdapter
                        .syncArray('disciplines')
                        .$loaded()
                        .then(function (list) {
                            return list;
                        });
                },
                tournaments: function (FirebaseAdapter) {
                    return FirebaseAdapter
                        .syncArray('tournaments')
                        .$loaded()
                        .then(function (list) {
                            return list;
                        });
                }
            },
            views: {
                filter: {
                    templateUrl: 'play/lobby/filter.tpl.html',
                    controller: LobbyFilterController
                },
                browser: {
                    templateUrl: 'play/lobby/browser.tpl.html',
                    controller: LobbyBrowserController
                }
            }
        });

一切正常。问题是:在控制器中,LobbyFilterController$scope.$watch()用于侦听对象的更改。但是仅在状态成功加载后才触发$watch()命令一次加载状态并更改对象内部的属性值后,什么也不会发生。

LobbyFilterController

function LobbyFilterController($scope, games, TournamentFilter) {
    $scope.filter = {
        game: null,
        mode: 'regular',
        type: 'all',
        format: 'all',
        eliminationMode: 'all',
        gridsize: 'all',
        status: 'all',
        groupstage: false,
        reshuffledGrid: false,
        password: false
    };

    $scope.$watch($scope.filter, function(data) {
        console.log('filter changed...');
    }, true);
}

当我尝试使用$ scope.myVar这样的普通值时,此行为不会改变。由于事件在加载后触发一次,所以我想我没有记错(希望我记错了)吗?

PSL

您需要提供监视属性(或监视表达式)作为字符串或返回值的函数表达式。相反,您正在设置一个对象。尝试将其更改为:

$scope.$watch('filter', function(data) {
    console.log('filter changed...');
}, true);

$ watch用于从提供的表达式中$parse创建一个吸气剂。您提供的是一个对象作为表达式,由于它仅查找字符串或函数,因此将被忽略。从源头上查看案例陈述并且所有观察者都将至少触发一次以在摘要周期中启动脏检查(在您的情况下也会发生这种情况),并且如果您在第一次执行中查找参数,您会发现两个值都是未定义的,因为没有真正观察到任何东西否则观察者将始终返回undefined带有重写的angular.noop函数。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

$ scope。$ watch不触发(控制器为vm)

scope。$ watch在控制器内不触发

ui路由器更改状态时,角度控制器作用域不破坏变量

当使用$ templateCache拉入视图时,UI路由器控制器不起作用吗?

$ scope。$ watch在jQuery onchange之后不触发?

父控制器上的$ scope。$ watch不会在子ng-select上触发

没有$ scope。$ watch的服务和控制器之间的双向绑定。这是不好的做法吗?

角度控制器:$ scope或VAR用于非视图变量

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

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

角度控制器作为语法,在特殊情况下还需要$ scope吗?

Angular新路由器将$ scope注入控制器

调用angular.extend不会导致$ scope。$ watch触发

Angular自定义指令-$ scope。$ watch不触发

Obj-C - 关闭所有推送的视图控制器会导致崩溃吗?

AngularJs:ui-router *需要*我将 $scope 注入我的控制器吗(即使使用 Controller As 语法)?

木偶路由器未触发路由上的控制器方法

呈现视图控制器会触发UIApplicationDidChangeStatusBarOrientationNotification

AngularJS:单元测试控制器返回“ TypeError:$ scope。$ watch不是函数”

在没有$ scope或$ watch的情况下跨Angular控制器访问函数

填充选择不触发角度控制器

angularjs控制器对象的本机成员(非$ scope等)会做任何事情吗?

PHP MVC:在控制器内部使用路由器吗?

UI路由器多视图单个控制器

角路由器动画不触发

等效于$ scope。$ broadcast和$ scope.on的角度控制器

角度1 $ scope和控制器为,$ scope何时消失?

ping速度慢时路由器会导致请求超时吗?

$ scope变量的更改未触发角$ watch