首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在AngularJS的指令作用域中,'@‘和'=’有什么区别?

在AngularJS的指令作用域中,'@‘和'=’有什么区别?
EN

Stack Overflow用户
提问于 2012-12-27 14:10:29
回答 15查看 558.9K关注 0票数 1.1K

我仔细阅读了关于这个主题的AngularJS文档,然后摆弄了一个指令。这是fiddle

下面是一些相关的代码片段:

HTML{{text}}

  • From
  • 指令中的窗格:

作用域:{ biTitle:'=',标题:'@',bar:'=‘},

有几件事我不明白:

  • 为什么我必须在'@'中使用"{{title}}",在'='
  • Can中使用"title"我也可以直接访问父作用域,而不用用attribute?
  • The修饰我的元素文档说“通常希望通过表达式将数据从隔离作用域传递到父作用域”,但这似乎也适用于双向绑定。为什么表达式路由会更好?

我还发现了另一个显示表达式解决方案的小提琴:http://jsfiddle.net/maxisam/QrCXh/

EN

回答 15

Stack Overflow用户

发布于 2012-12-27 14:20:30

=意味着双向绑定,因此对父作用域的变量引用。这意味着,当您更改指令中的变量时,它也会在父范围中更改。

@表示变量将被复制(克隆)到指令中。

据我所知,<pane bi-title="{{title}}" title="{{title}}">{{text}}</pane>也应该可以工作。bi-title将接收父范围变量值,该值可以在指令中更改。

如果需要更改父作用域中的几个变量,可以从指令中在父作用域上执行函数(或通过服务传递数据)。

票数 66
EN

Stack Overflow用户

发布于 2014-11-22 07:19:34

如果你想通过一个活生生的例子更多地了解它是如何工作的。http://jsfiddle.net/juanmendez/k6chmnch/

代码语言:javascript
复制
var app = angular.module('app', []);
app.controller("myController", function ($scope) {
    $scope.title = "binding";
});
app.directive("jmFind", function () {
    return {
        replace: true,
        restrict: 'C',
        transclude: true,
        scope: {
            title1: "=",
            title2: "@"
        },
        template: "<div><p>{{title1}} {{title2}}</p></div>"
    };
});
票数 39
EN

Stack Overflow用户

发布于 2015-08-26 11:40:27

@ get as string

  • 这不会创建任何绑定。您只是获得了作为字符串

传入的单词

= 双向绑定

从控制器所做的

  • 更改将反映在指令持有的引用中,反之亦然

&的行为略有不同,因为作用域获取了一个函数,即返回在中传递的对象。我假设这是使其正常工作所必需的。小提琴应该清楚地表明这一点。

  • After调用此bindings

函数时,结果对象的行为如下:

  • 如果传递了函数:则在调用时在父(控制器)闭包中执行函数如果传入了非函数
  • :只需获取没有getter的对象的本地副本

This fiddle should demonstrate how they work。请特别注意名称中包含get...的作用域函数,希望能更好地理解我所说的&的含义

票数 39
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14050195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档