角度指令不会更新布尔值

Angular directive won't update boolean

本文关键字:更新 布尔值 指令      更新时间:2023-09-26

我的控制器中有一个函数,可以切换一个类,并将值$scope.logocollapsed更改为 true 以隐藏元素。当我使用 ng-click 调用它按设计工作的函数时,将添加类并将值设置为 true。

我发出了切换类的指令,并更改了$scope.logocollapsed的值,这是在滚动事件上调用的,它切换了类,但是它不会更改$scope.logocollapsed的值

这是我的指示:

                .directive('scrollspy', function () {
                    return {
                        restrict: 'A',
                        link: function (scope, element, attrs) {
                            var raw = element[0];
                            console.log('loading directive');
                            element.bind( 'scroll', function() {
                                //console.log(raw.scrollTop);
                                if (! $('.sidebar-menu').hasClass('collapsed')){
                                    if (raw.scrollTop > 200) {
                                        scope.menuClose();
                                    }
                                }
                            });
                        }
                    };
                }) 

这是我的控制器内部的样子。

$scope.menuClose = function(bool) {
 if(! $('.sidebar').hasClass('collapsed')) {
     $('.sidebar-menu').addClass('collapsed');
     $scope.logocollapsed == true;
 }
};

同样,我不确定为什么我的指令能够运行 menuClose() 函数并处理类,但它不会将值更新为 false。

我感谢任何建议

你有几个问题。

  • 如另一个答案中所述,您正在进行相等比较而不是分配@$scope.logocollapsed == true;

  • 必须执行scope.$apply才能在滚动事件中手动触发摘要周期。

    element.bind( 'scroll', function() { if (! $('.sidebar-menu').hasClass('collapsed')){ if (raw.scrollTop > 200) { scope.menuClose(); scope.$apply(); } } });

  • 在控制器中执行 DOM 操作或显式 DOM 访问不被认为是一种好的做法。您可能应该将该代码if(! $('.sidebar').hasClass('collapsed')) {...移动到指令链接器函数。并让控制器功能仅设置标志。

一看,问题似乎在$scope.menuClose之内。

这:

$scope.logocollapsed == true;

应该是这样的:

$scope.logocollapsed = true;

== 是比较运算符,而 = 是赋值运算符。