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

真正阻止元素绑定-取消绑定元素-AngularJS

鞠隐水
2023-03-14
问题内容

我正在尝试找出如何阻止 DOM 元素以角度限制来自合并范围的数据。

我知道您可以使用if语句和所有方法来执行此操作,但是是否有一种真正而永久的方法来停止以角度绑定元素但保留添加的内容?

所以说我有这个

<div ng-bind=​"content" class=​"ng-binding">​Welcome​</div>​

我更改了模型,以便div更改为此。

<div ng-bind=​"content" class=​"ng-binding">​Welcome​ World</div>​

然后,我单击将其解除绑定的按钮,因此,如果将模型更改为'Welcome Universe',则<div>不需要与以前相同。这个

<div ng-bind=​"content" class=​"ng-binding">​Welcome​ World</div>​

我知道还有许多其他方法可以执行此操作,但是我不知道要真正地解除绑定元素的任何方法,而无需克隆它并替换循环属性和文本的旧方法。

演示内容: http :
//jsfiddle.net/a9tZY/

因此,这样做不会影响模型或绑定到该模型的其他元素。

长话短说,告诉Angular将元素永远保留下来。


问题答案:

更新

这样做的方法是使用类似的指令在元素上创建一个新的作用域。

yourModule.directive('unbindable', function(){
    return { scope: true };
});

像这样将其应用于您的元素

<div unbindable id="yourId"></div>

然后,要取消此元素与任何更新的绑定,请执行此操作。

angular.element( document.getElementById('yourId') ).scope().$destroy();

完成,这是一个演示。

演示:
http
://jsfiddle.net/KQD6H/

因此,这会在元素上创建一个新的作用域,并且只能工作,因为所有作用域都从其父作用域继承所有数据。因此,作用域与父作用域基本相同,但是可以在不影响父作用域的情况下销毁作用域。因为给定了这个元素自己的作用域,所以在销毁它时,它不会像其他所有元素一样使父作用域恢复原状,如果这是合理的0.o

这条线下面的所有内容都是我的原始答案,如果有人喜欢这种方式,我将其保留在此处

我设法通过unbindable指令真正实现了这一目标。当您unbinable在元素上设置了指令时,解除绑定元素所需的全部就是这个。

yourElement.attr('unbind', 'true'); // Ref 1
$scope.$broadcast('unbind'); // Ref 2

这是指令。

app.directive('unbindable', function(){
    return {
        scope: true, // This is what lets us do the magic.
        controller: function( $scope, $element){ 
            $scope.$on('unbind', function(){ // Ref 3
                if($element.attr('unbind') === 'true'){ // Ref 4
                    window.setTimeout(function(){ $scope.$destroy() }, 0);//Ref 5
                }
            });
        }
    }
});

这样您就可以设置您的元素。

<h1 unbindable></h1>

因此,每当您将unbind="true"属性添加到h1并广播时,unbind该元素都将被取消绑定

REF-1: 将unbind true属性添加到该元素,以便该指令知道您要解除绑定的元素。

REF-2: 在范围内广播unbind事件,以便该指令知道您要取消绑定元素-
确保首先添加属性。-–根据您的应用布局,您可能需要使用$rootScope.$broadcast

REF-3 :广播取消绑定事件时

REF-4 :如果与指令关联的元素具有真正的取消绑定属性

REF-5
:然后销毁该指令的作用域。我们必须使用,setTimeout因为我认为angular在$on事件发生后会尝试执行某些操作,并且会收到错误消息,因此使用此命令setTimeout可以防止发生该错误。虽然会立即触发。

这适用于多个元素,这是一个不错的演示。

演示:
http://jsfiddle.net/wzAXu/2/



 类似资料:
  • 如何在JavaSpringBoot应用程序中从配置yml文件加载对象列表? 我已经尝试了几个来源: 配置-属性-在-Spring-引导 Spring Boot配置属性示例 SpringBoot 2的元素没有绑定 堆栈:Java11,SpringBoot 2.1.4,Lombok,. yml格式的配置文件。 我尝试实现简单的@Component,它将从配置文件加载数据。 配置值为: 用于数据加载的J

  • 我的Spring Boot应用程序有一个文件application.yml,它不愿意运行。 根据日志,元素[simulator.geo.b12,simulator.geo.b13,simulator.geo.b21,simulator.geo.c6,simulator.geo.host]未绑定的原因。然而,这个属性是在application.yml设置的,编译器甚至会返回它的值。 如果有人能帮我解

  • 本文向大家介绍aurelia 绑定到选择元素,包括了aurelia 绑定到选择元素的使用技巧和注意事项,需要的朋友参考一下 示例 字符串数组 在选择下拉列表中选择一个值并提供字符串数组时,所选值将作为字符串绑定到选择元素的value属性,我们可以使用字符串插值显示该字符串。 对象数组 与上面的示例不同,当提供对象数组时,在下拉列表中选择一个值时,绑定到该特定选项的模型就是所提供的对象。      

  • 英文原文:http://emberjs.com/guides/templates/binding-element-attributes/ 除了普通文本,你可能也希望在模板中包含可以将其属性绑定到控制器的HTML元素。 例如,想象一下你的控制器中包含这样一个属性,它包含指向一幅图像的URL地址: 1 2 3 <div id="logo"> <img {{bind-attr src=logoUr

  • 问题内容: 我已经编写了angularjs指令。在该指令的模板中,我添加了一个ngIf指令,并在其中显示绑定到指令范围的输入。 经过大量的反复试验,我注意到ngIf指令导致更改输入文本时模型无法更新。如果我将其更改为ngShow,则一切正常。 我正在寻找这种差异的解释 我在这里创建了一个jsfiddle 问题答案: 之所以会这样,是因为ngIf创建了一个新的子作用域,因此,如果您想绑定到与其他输入

  • 英文原文:http://emberjs.com/guides/templates/binding-element-class-names/ 像其他所有属性一样,HTML元素的class属性也可以被绑定,如下所示: 1 2 3 <div {{bind-attr class="priority"}}> Warning! </div> 如果控制器的priority属性的值是"p4",上面的模板将