我在范围属性定义中看到了一些使用问号('?')的指令,如下所示:
app.directive('userInfo', function() {
return {
restrict: 'A',
scope: {prop: '=?'},
templateUrl: 'some/template/url',
};
我已经找到了它,我看到的唯一想法是:what's the meaning of '=?' in angularJS directive isolate scope declaration?。但它并没有按照他在那里解释它的方式工作。我已成功运行我的应用程序,并且没有抛出异常。
有人可以详细说明一下吗?
答案 0 :(得分:13)
如果您不添加?
并且不在您的元素上添加prop
属性,那么您正在使用该指令在,然后会抛出异常。
添加?
,将该属性标记为可选。如documentation for $compile
中所述:
你可以使用=来避免这种行为吗?或=?attr以便将属性标记为可选。
我认为文档可能在该领域有点过时了。 NON_ASSIGNABLE_MODEL_EXPRESSION
仅出现在older revisions of the source。
请注意,只有在您尝试写入范围属性时才会抛出异常。我把一个快速的傻瓜拼凑起来展示这个问题:http://plnkr.co/edit/hjUq6ZisuRG2C3mZpRDj?p=preview