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

观察布尔值时,AngularJS指令双向数据绑定不起作用

顾承平
2023-03-14
问题内容

我有一个双向数据绑定,它不会更改发送到指令的变量的值。

我的指令监视触发器,并将焦点集中在associates元素上(基于在SO处找到的代码):

app.directive('focusMe', function ($timeout) {
  return {
    scope: {
      trigger: '=focusMe'
    },
    link: function (scope, element, attrs) {
      scope.$watch('trigger', function(value) {
        console.log("directive value: " + value);
        console.log("directive start: " + scope.trigger);
        if (value === true) {
          $timeout(function () {
            element[0].focus();
            scope.trigger = false;
            console.log("directive end: " + scope.trigger);
          });
        }
      });
    }
  }
});

在HTML中,我将其称为:

<input type="text" ng-model="item.value" focus-me="focusInput" />

当我第一次触发它时,它可以工作-
因为focusInput变量会切换其值。但是focusInput在控制器范围内(指令外部)不会false在指令完成时切换回原来的状态。

假设我了解false应该发生的情况,则在致电时切换回应该发生的scope.trigger = false情况。

缺少什么会导致双向绑定不将值推回传递给指令的变量?

更新01:

为了发布问题,我删除了一些代码。HTML实际上看起来像这样:

<input type="text" ng-model="item.value" focus-me="focusInput" ng-if="item.condition != 'matches' && item.condition != 'does not match'" />

如果该input字段被隐藏,然后重新显示(基于ng- if),则该指令将在第一次focusInput更改时正确地给予焦点。之后,它将再次停止工作…除非重复执行隐藏/显示过程。


问题答案:

处理范围内的原始值(布尔值,整数等)时,您遇到的问题是一个常见问题。

我强烈建议阅读“ 了解范围”文章。(简短的答案:原语在指令的隔离范围中更改,并且不在父范围(即您的控制器范围)的链中寻找)。

至于如何解决您的情况,我建议使用点符号并将原始存储在对象中,然后将此对象绑定到指令:

scope: {
   triggerObj: '=focusMe'
},

并确保您现在在指令中引用触发器scope.triggerObj.trigger

并在您的控制器中具有:

$scope.triggerObj = {};
$scope.triggerObj.trigger = true; //or false, what have you

拥有一个对象将确保双向绑定将起作用。如果有时间,请阅读上面的文章:)



 类似资料:
  • 问题内容: 我一直在尝试定义指令,以便可以根据字段的类型及其参数(存储在数据库中)以表格形式显示不同的“窗口小部件”。我需要对不同类型的场景做出反应,因此需要使用指令来处理布局。 在玩一些示例时,我想出了 kinda 可以工作的代码: HTML 指示 这似乎可行(尽管明显比* proper * angularJS变量绑定要慢),但我认为必须有更好的方法来做到这一点。谁能阐明这件事? 问题答案: 我

  • 问题内容: 如果我有一个没有模板的AngularJS指令,并且希望它在当前作用域上设置一个属性,那么最好的方法是什么? 例如,计算按钮点击次数的指令: 使用伪指令将点击计数分配给双向属性中的表达式: 有一个更好的方法吗?从我所读的内容来看,孤立的作用域会过大,但是我需要一个子作用域吗?除了使用以外,还有没有更干净的方法可以写回指令属性中定义的范围变量。我只是觉得我很难过。 这里有完整的柱塞。 问题

  • 问题内容: 更新 :在代码的另一部分中一定有些愚蠢。现在可以使用,因此bindToController语法很好。 我们正在使用AngularJS 1.4,它引入了在指令中使用bindToController的新方法。 经过大量的阅读(也许并不能理解所有内容),我们如下定义了指令: 从这样的另一个视图调用它: 先前已在视图控制器中定义: 像这样在指令模板中引用变量: 我们花了4小时试图弄清楚为什么我

  • 本文向大家介绍深入理解Angularjs向指令传递数据双向绑定机制,包括了深入理解Angularjs向指令传递数据双向绑定机制的使用技巧和注意事项,需要的朋友参考一下 下面来先看一个简单例子 这个例子我用通俗的话来过一遍 1.使用隔离作用域 让DOM中的 ng-model="Url" ,这里暂且叫他'A' 与 指令中的 some-attr="Url" --> 'B' 形成双向绑定关系 经过上面的步

  • 我正在用Eclipse Juno、WindowBuilder在Java7 SE上开发我的第一个JDialog,“摆动自动数据库”()。我很想测试自动数据绑定 我只在Eclipse数据绑定GUI的帮助下为类用户提供了一个编辑对话框。 “我的对话框”将打开,其中的文本字段包含来自用户实例的正确初始值。当我修改文本字段文本,然后单击Ok按钮时,我看不到对用户实例的任何更改。这是我的对话代码。。。。。 绑

  • 本文向大家介绍浅谈AngularJs 双向绑定原理(数据绑定机制),包括了浅谈AngularJs 双向绑定原理(数据绑定机制)的使用技巧和注意事项,需要的朋友参考一下 那么什么是双向绑定,下面简单进行讲解。 首先我们要理解数据绑定。我们看到的网站页面中,是由数据和设计两部分组合而成。将设计转换成浏览器能理解的语言,便是html和css主要做的工作。而将数据显示在页面上,并且有一定的交互效果(比如点