迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > Angular >

AngularJS 中的自定义指令范围

作者:迹忆客 最近更新:2023/04/13 浏览次数:

范围允许 AngularJS 确保另一个对象不会意外更改一个对象。它通过创建对象的新副本并将其存储在内存中来做到这一点。

范围还用作安全措施,防止未经授权的用户访问页面上的对象。本文将介绍不同的范围相关选项和策略,例如使用共享范围、继承父作用域和隔离范围。


AngularJS 中的自定义指令范围

AngularJS 作用域是 AngularJS 中的基本概念之一。范围用于确定特定变量和函数的可见性。

让我们谈谈方向;如果我们想要一个应用程序中的一个独特的功能,并想在整个应用程序部分使用它,我们必须编写一个代码集。它在 Angular 中被称为指令。

范围与所有指令相关联。此范围用于访问模板中的数据和方法。

除非特别设置,否则指令默认情况下不会建立其范围。因此,指令将其父级的范围视为自己的。

通过将定义为指令定义对象的配置对象提供给 AngularJS,我们可以更改指令的默认范围。让我们深入探讨这个话题。


在 AngularJS 中使用 Scope: False 或 Shared Scope

它生成与其父作用域相同的单个范围,这意味着对父作用域的任何更改都将反映在指令的范围中,反之亦然。

JavaScript:

var app = angular.module("Demo",[]);
app.directive("myDirective", function(){
    return {

        scope: false,
        template: "<div>Name : {{name}}</div>"+
        "Write your Name : <input type='text' ng-model='name' />"
    };
});

app.controller("Hello",function($scope){
    $scope.name = "Adil";
    $scope.reverseName = function(){
    $scope.name = $scope.name.split('').reverse().join('');
    };
});

HTML 代码:

<div ng-app="Demo">

    <div ng-controller="Hello">
        <h3 ng-click="reverseName()">Hello Dear {{name}}, Click here to change your name</h3>
        <div my-directive class='directive'></div>
    </div>
</div>

在此示例中,当我们更改文本框的名称时,标题名称也会更改。该指令使用其父作用域,因为 DDO 未将其包含在此处。

因此,我们在指令中所做的任何更改也适用于父作用域。


在 AngularJS 中使用 Scope: True 或派生作用域

它是派生作用域而不是父作用域。如果你修改指令范围,更改将不会反映在控制器范围中。

但是,对父作用域的修改将反映在指令范围中。

JavaScript 代码:

var app = angular.module("Demo",[]);
app.directive("myDirective", function(){
    return {

        scope: true,
        template: "<div>Name : {{name}}</div>"+
        "Write your Name : <input type='text' ng-model='name' />"
    };
});

app.controller("Hello",function($scope){
    $scope.name = "Adil";
    $scope.reverseName = function(){
    $scope.name = $scope.name.split('').reverse().join('');
    };
});

HTML 代码:

<div ng-app="Demo">

    <div ng-controller="Hello">
        <h3 ng-click="reverseName()">Hello Dear {{name}}, Click here to change your name</h3>
        <div my-directive class='directive'></div>
    </div>
</div>

在此示例中,父作用域的值将显示在屏幕上。但是如果我们修改文本框中的值会发生什么?

然后只会更改子作用域。它表明父作用域保持不变。


在 AngularJS 中使用 Scope : {} 或独立作用域

孤立的范围是最重要的方面之一。该指令会在此处构造一个新的作用域对象,但不会继承父作用域;因此,它不会知道父作用域。

但是,我们如何从中检索数据,如果我们不与父作用域连接,我们如何编辑它?答案是将实体的属性放在 DDO 中;但是,你需要先在指令中设置属性。

我们在隔离范围内使用三个前缀来帮助将控制器的属性或方法链接到指令。让我们看看这是如何工作的。

当指令在 DDO 中发现其范围属性中的任何前缀时,它会在使用声明的属性调用指令的 HTML 页面的指令声明中仔细检查它们。

在任何前缀之后,我们可以给出不同的属性名称来更改名称。

AngularJS 有三种类型的前缀。

  1. @ - 单向绑定
  2. = - 直接模型绑定/双向绑定
  3. & - 方法绑定

在 AngularJS 中使用 @ 或单向绑定

单向绑定意味着当父级通过指令中反映的属性将某些内容发送到指令范围时。但是,对指令的任何更改都不会反映在父级中。

字符串值使用 @ 符号传递。

JavaScript 代码:

var app = angular.module("Demo",[]);


app.directive("myDirective", function(){
    return {

 scope: {
            name: '@'
        },
        template: "<div>Name :  {{name}}</div>"+
        "Write your Name : <input type='text' ng-model='name' />"
    };
});

app.controller("Hello",function($scope){
    $scope.name = "Adil";
    $scope.reverseName = function(){
    $scope.name = $scope.name.split('').reverse().join('');
    };
});

HTML 代码:

<div ng-app="Demo">

    <div ng-controller="Hello">

        <div my-directive class='directive'></div>

    </div>
</div>
<div ng-app="Demo"></div>

在 AngularJS 中使用 = 或双向绑定

它用于将对象传递给指令而不是字符串。该实体可以从父方和指令方进行修改。

这就是为什么它被称为双向。要使用双向绑定,你需要在作用域的位置放置 = 符号。

scope: {

 name: "="

}

在 AngularJS 中使用 & 或方法绑定

它用于将任何父级的方法连接到指令范围。每当我们调用指令的父方法时,我们都可以使用它。

它用于调用当前不在范围内的函数。要使用方法绑定,你需要将& 符号放在作用域的位置。

scope: {
     name: "&"
}

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Do you understand JavaScript closures?

发布时间:2025/02/21 浏览次数:108 分类:JavaScript

The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.

Do you know about the hidden traps in variables in JavaScript?

发布时间:2025/02/21 浏览次数:178 分类:JavaScript

Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av

How much do you know about the Prototype Chain?

发布时间:2025/02/21 浏览次数:150 分类:JavaScript

The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start

用 jQuery 检查复选框是否被选中

发布时间:2024/03/24 浏览次数:102 分类:JavaScript

在本教程中学习 jQuery 检查复选框是否被选中的所有很酷的方法。我们展示了使用直接 DOM 操作、提取 JavaScript 属性的 jQuery 方法以及使用 jQuery 选择器的不同方法。你还将找到许多有用的

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便