【发布时间】:2012-10-13 12:19:35
【问题描述】:
我正在尝试创建类似于以下内容的自定义标签:
<mytag type="Big" />
其中 type 是绑定到组件的属性。以这样的方式将文本设置在标签中,如下所示:
<label>{{type}}</label>
...(其他组件)...
正如文档所说,我有一个设置默认类型的控制器:
$scope.type = "Small";
所以如果我使用没有属性类型的标签仍然会被设置。
我正在尝试使用指令进行绑定:
angular.module('TestPage',[])
.directive('mytag',function() {
return {
restrict: 'E',
templateUrl: 'component.html',
scope: {
type: '='
}
}
});
请注意,我的组件模板中确实有适当的 ng-app 设置 (ng-app="TestPage")。
我的问题是与类型的绑定似乎并没有真正绑定任何东西。
我已阅读有关如何使用指令将变量绑定到组件的文档。根据文档,您可以在范围内进行此类绑定。范围显然可以包含一个“对象哈希”(不管那是什么!),它创建了一个称为“隔离范围”(???)的东西。此类范围可以通过以下方式表示“本地属性”:
@ 或 @attr - 将本地范围属性绑定到 DOM 属性。结果始终是一个字符串 因为 DOM 属性是字符串。如果未指定 attr 名称,则本地名称和 属性名称相同。给定范围的小部件定义:{ localName:'@myAttr'},然后小部件范围属性 localName 将反映 hello {{name}} 的插值。随着 name 属性的变化,小部件范围上的 localName 属性也会发生变化。名称是从父作用域(不是组件作用域)读取的。
啊???这与正确的绑定语法有什么关系?
= 或 =expression - 在本地范围属性和父级之间设置双向绑定 范围属性。如果未指定 attr 名称,则本地名称和属性名称相同。 给定范围的widget定义:{localModel:'=myAttr'},那么widget范围属性localName将在父范围上反映parentModel的值。对 parentModel 的任何更改都将反映在 localModel 中,而对 localModel 的任何更改都将反映在 parentModel 中。
对不起?这里在说什么???
& 或 &attr - 提供一种在父作用域的上下文中执行表达式的方法。如果不 指定 attr 名称,则本地名称和属性名称相同。给定 和范围的小部件定义:{ localFn:'increment()' }, 然后隔离范围属性 localFn 将指向 increment() 表达式的函数包装器。通常希望通过表达式将数据从隔离作用域传递到父作用域,这可以通过将局部变量名称和值的映射传递到表达式包装器 fn 来完成。例如,如果表达式是 increment(amount),那么我们可以通过调用 localFn 来指定数量值 localFn({amount: 22})。
现在我完全糊涂了!你有小部件标签和某种相关的功能,我必须写我才能进行绑定???我想要的只是将值绑定到标签标签!
我从文档 (http://docs.angularjs.org/guide/directive) 中复制了上面的文字,以说明这一点:这个文档读起来像旧的 UNIX 文档:对已经了解系统的人非常有用,但对初学者没有太大帮助试图发展真正的专业知识。所有的教程都展示了如何在 AngularJS 中完成简单的任务(非常适合玩具应用程序,但对于我想要构建的客户端应用程序不是那么好),为什么没有更高级的东西???
好的,是时候让我更有建设性了。
有人可以提供一些很好的简单示例,说明如何执行本文档极难描述的各种绑定吗???显示这些范围语句的正确语法的示例以及它们如何返回到添加到自定义标签的属性的描述(用简单的英语)???
感谢您的耐心等待,并提前感谢您提供的任何帮助。
【问题讨论】:
-
我已经发了一个blog post 关于这个:我认为这个主题应该在官方教程中 - 拥有可重用组件是一个杀手级功能。我为此提交了pull request
-
遇到这些挫折的不止您一个人。我当然有过这种感觉。不过,对于那些读过这篇文章并有类似感受的人来说,只是一句鼓励的话:坚持下去。我不是 Angular 的粉丝或爱好者,但是一旦我成功了,我就真的开始享受用它来构建了。 (对于 UNIX 也是如此!;)
标签: angularjs