当前位置: 首页 > 面试题库 >

为什么我必须在这里调用$ scope。$ digest()?

闾丘文昌
2023-03-14
问题内容

我创建了一个用于显示工具提示的指令:

app.directive('tooltip',function(){
    return{
        restrict: 'A',
        link: function(scope,element,attr){
            element.bind('mouseenter',function(e){

                scope.setStyle(e);

            });
        }
    }
});

对应setStyle()功能:

$scope.setStyle = function(e){
    $scope.style = {
        position: 'absolute',
        // some other styles
    };

    $scope.$digest();
};

$scope.style 应用于此:

<span ng-style="style">I am a tooltip</span>

这是我观点的一部分,由拥有者的控制器处理 $scope.style

为什么必须调用$digest()才能将更改应用到$scope.style,该更改是早先声明和初始化的?


问题答案:

因为附加到mouseenter事件的回调超出了angular的范围;angular不知道该函数何时运行/结束,因此摘要循环永远不会运行。

调用$digest$apply告诉angular更新绑定并触发任何手表。



 类似资料:
  • 问题内容: 每个人都告诉我“使用super.viewDidLoad()因为它就是这样”或“我一直那样做,所以要保留它”,“如果不叫super就是错误的”等。 我只发现了一些有关Objective-C用例的主题,这些主题并没有那么启发性,但是我正在Swift 3中进行开发,所以有什么专家可以给我一个很好的详细解释吗? 这是一种良好实践的案例还是有任何隐藏的影响? 问题答案: 通常,最好为您覆盖的所有

  • 我正在设计一个网站,在导航我有2个链接有下拉菜单(“关于”和“服务”)。当你将鼠标悬停在链接上时,下拉菜单就会出现,然后当你点击链接时,下拉菜单就会消失,然后如果你再点击它,下拉菜单就会再次出现。所以基本上,为了进入那个页面,你必须三次点击链接。有没有人知道我可以做什么来改变这个,这样你就可以在点击一次后进入页面? 这是导航在我的HTML代码中的样子: 以下是相关的CSS: 编辑:我发现下拉菜单是

  • 关于在最新版本的GCC和Clang中编译有几个问题:实验::filessystems链接器错误 但是现在< code>filesystem已经被c 17接受,所以不再需要< code>experimental或< code>-lstdc fs标志,对吗? 错了,我甚至不能 只给了我< code >实验版本,我怎么能包括正式接受的版本呢?

  • 测试代码为: 测试代码为: 你知道怎么了吗?

  • 我遇到JSON解析错误。我的代码如下: 我从我的检查中得到以下错误: 由于:com,无法分析JSON。谷歌。格森。JsonSyntaxException:java。lang.IllegalStateException:应为BEGIN\u对象,但在第1行第2列为BEGIN\u数组 对于我试图读取的JSON,如果成功,我的应该返回5。 我做错了什么?

  • 在模板中,为什么要在从属名称上放置和? 从属名称到底是什么? 我有以下代码: 我遇到的问题是行。我相当肯定是一个从属名称,VC++完全正确地扼杀了它。 我还知道我应该可以在某个地方添加来告诉编译器inUnion>是一个模板ID。但具体在哪里?然后它是否应该假设inUnion是一个类模板,即命名的是一个类型而不是一个函数?