我是Angular的新手,我试图创建一个指令并对孤立的范围属性有疑问。如果我有一个指令:AngularJS指令 - 是否需要隔离范围属性?
MyApp.directive('myDirective', function() {
return {
scope: {
symbol: '@'
},
...
是否有可能作出某种方式所需的符号?在我的情况下,如果它没有提供指令将无法正常工作。
我是Angular的新手,我试图创建一个指令并对孤立的范围属性有疑问。如果我有一个指令:AngularJS指令 - 是否需要隔离范围属性?
MyApp.directive('myDirective', function() {
return {
scope: {
symbol: '@'
},
...
是否有可能作出某种方式所需的符号?在我的情况下,如果它没有提供指令将无法正常工作。
您可以使用第二个指令并在第一个指令中要求。对于myDirective
实际需要symbol
MyApp.directive('myDirective', function() {
return {
scope: {
symbol: '@'
},
require: 'symbol',
link: angular.noop //this is needed to check for the required controller
...
}
}
MyApp.directive('symbol', function() {
return {
controller: angular.noop
}
}
控制器是必要的。请记住,像这样的情况下,用命名空间为指令添加前缀至关重要。
这里是一个jsfiddle这个工作的例子。在这个例子中,我已经覆盖了角度错误服务,对所有错误发出警报。您可以看到错误的原因是<div>
缺少所需的指令。
这绝对有效,但它可以包含在单个指令中。在链接函数中检查attrs是否可能,以及何时丢失抛出错误?我会尝试一下,看看我能否得到它的工作。我想答案是你实际上不需要设置属性,但必须编写你自己的代码来检查这个。 – Elliot
我发现了一种为此使用的链接函数: 'code' 链路:功能(范围,元件,ATTRS){ 如果(attrs.requiredAttr ==未定义){// 手柄误差作为必要 } } 'code' – Elliot
是的,在链接中检查它是你可以随时做的事情。使用'angular.isUndefined(attrs.requiredAttr)'是一种更安全的方法。我倾向于使用'require'属性,因为我可以隔离代码以在自己的指令中验证attr,并且角度抛出一个很好的'$ compile'错误。这也意味着您可以编写更具体的测试,而且您不必测试缺少的attr代码作为主要指令的一部分。如果你真的想要先进的话,你可以动态地建立所需的指令,然后再进行角引导 – fooby
如果某人未能提供该属性,您会希望什么行为? –
您的指令链接或控制器函数检查scope.symbol未定义或您认为错误的任何值然后抛出和错误如果没有给出 –
这将在开发过程中使用。在设计视图时,通常会忘记或没有意识到要求指令正确工作的特定属性。需要提供某种视觉线索才能让他们知道正确的用法。它可能是一个警报或敬酒,甚至用帮助文本替换模板的内容。 – Elliot