Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:为什么自定义指令默认为仅为属性?_Angularjs - Fatal编程技术网

AngularJS:为什么自定义指令默认为仅为属性?

AngularJS:为什么自定义指令默认为仅为属性?,angularjs,Angularjs,在AngularJS中对指令限制有很好的解释。自定义指令可定义如下: angular.module("app", []).directive("blah", function () { return { restrict: "A", template: "blah directive. nothing to see here." }; }); 这就创建了一个我称之为属性指令的(由于限制:“a”)来询问这个问题。事实上,这是一个指令,可以像这样使用

在AngularJS中对指令限制有很好的解释。自定义指令可定义如下:

angular.module("app", []).directive("blah", function () {
    return {
        restrict: "A",
        template: "blah directive. nothing to see here."
    };
});
这就创建了一个我称之为属性指令的(由于
限制:“a”
)来询问这个问题。事实上,这是一个指令,可以像这样使用:

<div blah>
  <!-- content of directive -->
</div>

但是,当我想要创建自定义指令时,我通常选择元素指令,如:

<blah>
  <!-- content of directive -->
</blah>


前一个属性指令如何比后一个元素指令更好?为什么选择它作为默认值?

这只是我的观点:

在HTML中定义指令有三种可能的方法——属性、元素和类。类过于松散和混乱,最好的做法是将逻辑和样式分开。元素指令太严格-在DOM元素中只能有一个“元素”指令。这让他们从一开始就很特别

一个属性似乎是这两个极端之间的最佳中间地带——很明显,它允许在一个元素中有多个指令(如果你在关注Egghead的视频,“指令对指令通信”的超级英雄示例显示了一种“指令层次结构”,元素取代属性。此外,这在大多数情况下都非常重要(我为intranet应用程序编程,所以对我来说不是),属性允许angularJS模板成为有效的HTML


编辑-我的两分钱将是无关紧要的-在任何实际场景中,信任像restrict选项一样主要的东西的“默认”配置都是一个坏主意-设置它明确地表明了明确的、毫无疑问的指示(尤其是在团队项目中工作,但也可以在任何时候,真的)这是我的意见,只是:

在HTML中定义指令有三种可能的方法——属性、元素和类。类过于松散和混乱,最好的做法是将逻辑与样式分开。元素指令过于严格——DOM元素中只能有一个“元素”指令。这使得它们从一开始就很特殊

一个属性似乎是这两个极端之间的最佳中间地带——很明显,它允许在一个元素中有多个指令(如果你在关注Egghead的视频,“指令对指令通信”的超级英雄示例显示了一种“指令层次结构”,元素取代属性。此外,这在大多数情况下都非常重要(我为intranet应用程序编程,所以对我来说不是),属性允许angularJS模板成为有效的HTML


编辑-我的两分钱将是无关紧要的-在任何实际场景中,信任像restrict选项一样主要的东西的“默认”配置都是一个坏主意-设置它明确地表明了明确的、毫无疑问的指示(尤其是在团队项目中工作,但也可以在任何时候,真的)我的看法是:

基于元素的指令通常表示结构功能。


例如,我通常对弹出窗口、对话框、选项卡式窗口小部件和可重用窗口小部件使用基于元素的指令。然后,我可以向它们添加基于属性的指令(例如,将
ng click
添加到
指令),但元素名称(即指令名称)表示正在构建的内容的结构语义。

我对此的理解是:

基于元素的指令通常表示结构功能。


例如,我通常对弹出窗口、对话框、选项卡式窗口小部件和可重用窗口小部件使用基于元素的指令。然后,我可以向它们添加基于属性的指令(例如,将
ng click
添加到
指令),但元素名称(即指令名称)表示正在生成的内容的结构语义。

Angular 1.3将默认值更改为“AE”。请参阅:$compile#directive definition object

我猜是因为它是“限制”而不是“包括”而被更改了。所以,“限制”的默认值应该限制很少


这意味着什么?如果你看到一个“restrict:'E'”行,它实际上意味着“这不是用来作为一个属性的”,而不是“我只是想把它用作一个元素”的潜在的当前含义。Angular 1.3将默认值改为“AE”。请参阅:$compile#指令定义对象

我猜是因为它是“限制”而不是“包括”而被更改了。所以,“限制”的默认值应该限制很少


这意味着什么?如果你看到一行“restrict:'E'”,它实际上意味着“这并不意味着要用作属性”,而不是“我只是想将其用作元素”的潜在当前含义.

另一个原因可能是IE8支持,如果您将blah编写为元素,那么在IE8中它将无法工作,那么您需要编写类似document.createElement(“blah”)的创建状态但是,如果您将其定义为属性,那么它可以与IE8完美配合,另一个原因可能是IE8支持如果您将blah编写为元素,那么在IE8中它将不起作用,那么您必须编写类似document.createElement(“blah”)的创建状态但是,如果你定义为属性,它与IE8完美结合,实际上有4种方法。你也可以使用html注释来定义指令。我不知道为什么人们会需要它,可能是为了内部使用。同样对于元素指令,旧版本的IE不支持新元素,它会导致奇怪的行为。要克服这一点,请继续e确实需要调用
document.createElement('my-directive')
实际上有4种方法。您也可以使用html注释来定义指令。我不知道为什么需要这样做,可能是为了内部使用。同样对于元素指令,旧版本的