Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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,当您使用ng controller将控制器分配给DOM上的元素时,它只在该元素内部工作。例如: <section ng-controller="ExampleCtrl as example"> <h1>Example Controller Works Here</h1> {{example.item}} </section> <section> <h1>But Not Here</h1>

当您使用
ng controller
将控制器分配给DOM上的元素时,它只在该元素内部工作。例如:

<section ng-controller="ExampleCtrl as example">
    <h1>Example Controller Works Here</h1>
    {{example.item}}
</section>

<section>
    <h1>But Not Here</h1>
    {{example.item}} <!-- Nothing -->
</section>
app.directive('exampleDirective', function(){
    return {
        ...
        controller: 'ExampleCtrl',
        controllerAs: 'example'
    };
});

<section>
    <div example-directive>
        <h1>Example Controller Works Here</h1>
        {{example.item}}
    </div>
</section>

<section>
     <h1>And Example Controller Works Here Too</h1>
     {{example.item}}
</section>

示例控制器在这里工作
{{example.item}
但不是在这里
{{example.item}
但是,如果将控制器分配给某个指令,则该控制器将在使用该指令的页面上的任何位置工作。例如:

<section ng-controller="ExampleCtrl as example">
    <h1>Example Controller Works Here</h1>
    {{example.item}}
</section>

<section>
    <h1>But Not Here</h1>
    {{example.item}} <!-- Nothing -->
</section>
app.directive('exampleDirective', function(){
    return {
        ...
        controller: 'ExampleCtrl',
        controllerAs: 'example'
    };
});

<section>
    <div example-directive>
        <h1>Example Controller Works Here</h1>
        {{example.item}}
    </div>
</section>

<section>
     <h1>And Example Controller Works Here Too</h1>
     {{example.item}}
</section>
app.directive('exampleDirective',function(){
返回{
...
控制器:“ExampleCtrl”,
controllerAs:“示例”
};
});
示例控制器在这里工作
{{example.item}
示例控制器也在这里工作
{{example.item}
我想知道我是否在指令中使用了控制器,并且需要在页面的不同部分访问它,仅仅依赖该指令可以吗,还是再次声明它更好

<section>
    <div example-directive>
    ...
</section>

<section ng-controller="ExampleCtrl as example">
    ...
</section>

...
...
另外,如果我再次声明,是否会导致同一控制器的重叠功能出现问题


我不是问是什么让代码更干净或更容易阅读。我理解,如果我删除指令,页面上其他元素的功能会有被破坏的危险,以及这是如何脱离Angular的髓质设计的。我想知道,从严格的功能角度来看,这两种方法都有危险。

一般来说,最好保持指令自包含,而不是通过控制器泄漏功能。拥有一个具有支持多个组件(例如指令和页面模板)功能的控制器也不是一个好做法。您的示例过于笼统,无法给出具体的解决方案,但如果您发现您需要指令在指令之外提供的某些功能,这就是代码气味。对于仅位于两个
元素之一上的控制器,有没有什么原因使它不能移动到包装这两个部分的元素?我没有泄露指令的功能。我就是这么做的。我有一些非常相似的项目,仅为该功能重用控制器对我的代码来说是有意义的。我想知道这种泄漏是否正常。我可以包装整个区域并对其应用控制器,然后从指令中删除控制器分配。但我宁愿把它分配给指令。这有意义吗?没有,没有。这不是angular正在做的事情,这是您选择实现angular提供的功能的方式,但是这个选择不是一个好主意。同样,如果没有更具体的代码,这只是猜测,但是很多样式指南都警告不要考虑这种混合问题。很明显,该功能在指令之外泄漏。如果不是,你就不能使用它。因此,这是发生在美国的事情。我理解把事情模块化和分开。然而,在某些情况下,重用代码和控制器是有意义的。我不想把这变成一场关于我的代码是否干净的辩论。我提供的示例不是我的代码。这些都是例子。我想问的是,是否可以不再呼叫控制器,或者是否需要再次呼叫控制器。如果我再打一次电话可能会引起问题。