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

AngularJS指令:更改未在用户界面中反映的$ scope

路思源
2023-03-14
问题内容

我试图用AngularJS创建一些自定义元素并将一些事件绑定到它,然后我注意到$ scope.var在绑定函数中使用时不会更新UI。

这是描述探针的简化示例

HTML:

<!doctype html>
<html ng-app="test">
  <head>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>
    <script src="script.js"></script>

  </head>
  <body>

<div ng-controller="Ctrl2">
  <span>{{result}}</span>
  <br />
  <button ng-click="a()">A</button>
  <button my-button>B</button>

</div>


  </body>
</html>

JS:

function Ctrl2($scope) {
    $scope.result = 'Click Button to change this string';
    $scope.a = function (e) {
        $scope.result = 'A';
    }
    $scope.b = function (e) {
        $scope.result = 'B';
    }
}

var mod = angular.module('test', []);

mod.directive('myButton', function () {
    return function (scope, element, attrs) {
        //change scope.result from here works
        //But not in bind functions
        //scope.result = 'B';
        element.bind('click', scope.b);
    }
});

演示:http :
//plnkr.co/edit/g3S56xez6Q90mjbFogkL?p=preview

基本上,我将click事件绑定到用户my-button并想要$scope.result在用户单击按钮B时进行更改(类似于ng- click:a()按钮A上的更改)。但是$scope.result如果我这样做,视图将不会更新为新视图。

我做错什么了?谢谢。


问题答案:

事件处理程序称为“外部” Angular,因此,尽管您的$scope属性将被更新,但视图将不会更新,因为Angular不知道这些更改。

$scope.$apply()在事件处理程序的底部调用。这将导致摘要循环运行,并且Angular将注意到您对所做的更改$scope(由于$watchesAngular
{{ ... }}在HTML中使用了该设置)并更新了视图。



 类似资料:
  • 我创建了一个TableView,并为每个TableColumn注册了属性。内部数据的编辑可以很好地反映在TableView中。 然而,对于ListView,情况就不同了。除非我关闭框架并再次打开它,否则更改不会立即显示。

  • 问题内容: 将一个类添加到元素时,我想向该元素添加另一个类。当一个类被删除时,我想删除一个元素。我基本上是将一些引导程序类映射到某些角度形式验证类,但是当从元素中添加/删除一个类时,我无法弄清楚如何触发我的代码(还要确保不要引起类更改的无限循环) 。 到目前为止,这是我的指令的内容: 因此,基本上,当添加到元素时,我想将bootstrap类添加到父元素。何时删除,我想删除。 我想在Angular中

  • 编辑:这是在添加到购物车按钮onclick事件时执行的函数: addToCart action creator如下所示:

  • 问题内容: 我有一个AngularJS属性指令,并且只要其父输入的值发生更改,我都想采取措施。现在,我正在使用jQuery: 没有jQuery,有没有办法做到这一点?我发现keyPress事件并没有完全实现我想要的功能,虽然我确定自己会提出解决方案,但是当我在Angular项目中使用jQuery时,我会有些紧张。 那么,Angular如何做到这一点呢? 问题答案: AngularJS文档中有一个很

  • 问题内容: 我尝试编写一个小指令,以将其内容包装在另一个模板文件中。 这段代码: 应该有以下输出: 因为布局“默认”具有以下代码: 这里的指令代码: }); 我的问题: 例如,当我在模板(在布局模板中或在布局标签内部)中使用范围变量时。它只是最初工作。如果我更新变量,则该指令不再更新。整个链接功能只会被触发一次。 我认为,AngularJS不知道,该指令使用范围变量,因此不会被更新。但是我不知道如

  • 问题内容: 我需要从指令内的回调中修改根范围属性。但是,该指令位于由switch指令创建的内部范围内。 HTML JavaScript 小提琴:http://jsfiddle.net/nJ7FQ/ 我的目标是能够在“选定区域”中显示“新值”。我该如何完成我想做的事情?我究竟做错了什么? 此外,我正在尝试制作一个组件。有没有办法做到这一点,但要隔离范围? 问题答案: 我更新了小提琴,基本上不得不去父