您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

AngularJS指令范围中的'@'和'='有什么区别?

AngularJS指令范围中的'@'和'='有什么区别?

为什么我必须在“ ”中使用“ {{title}}”,而在“ ”中使用“ title” ?

将本地/定向范围属性绑定到 的 。如果使用title=title1title="title1",则DOM属性“ title”的值就是字符串title1。如果使用title="{{title}}",则DOM属性“ title”的值是的内插值{{title}},因此该字符串将是当前设置为父范围属性“ title”的任何值。由于属性值始终是字符串,因此在使用 时,在指令范围内,此属性总是以字符串值结尾。

将本地/定向范围属性绑定到 。因此,使用 ,您可以将父模型/范围属性名称用作DOM属性的值。您不能将{{}}s与 一起使用。

使用@,您可以执行title="{{title}} and then some"-插入{{title}}的操作,然后将字符串“ and some some”与其连接在一起。最终的串联字符串是local / directive范围属性所获得的。(您不能使用 ,只能使用 。)

随着 ,你将需要使用attr.$observe('title', function(value) { ... }),如果您需要在您的链接(荷兰国际集团)函数使用的值。例如,if(scope.title == "...")不会像您期望的那样工作。请注意,这意味着您只能异步 访问此属性。如果仅在模板中使用值,则无需使用$ observe()。例如template: '<div>{{title}}</div>'

使用 ,您不需要使用$ observe。

我是否还可以直接访问父范围,而不用属性装饰元素?

是的,但前提是您不使用隔离范围。从指令中删除此行

scope: { ... }

然后您的指令将不会创建新的作用域。它将使用父范围。然后,您可以直接访问所有父范围属性

该文档说:“通常希望通过表达式将数据从隔离的范围传递到父范围”,但这似乎也可以与双向绑定一起使用。为什么表达途径会更好?

是的,双向绑定允许本地/指令范围和父范围共享数据。“表达式绑定”允许指令调用由DOM属性定义的表达式(或函数)-您还可以将数据作为参数传递给表达式或函数。因此,如果您不需要与父级共享数据,而只想调用父级作用域中定义的函数,则可以使用 语法。

其他 2022/1/1 18:13:50 有698人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶