Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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
Javascript AngularJS控制器执行两次(不是因为路由器)_Javascript_Angularjs_Angularjs Controller - Fatal编程技术网

Javascript AngularJS控制器执行两次(不是因为路由器)

Javascript AngularJS控制器执行两次(不是因为路由器),javascript,angularjs,angularjs-controller,Javascript,Angularjs,Angularjs Controller,据我所知,此问题最常见的原因是当控制器包含在模板和路由提供程序中时。在我的例子中,路由器中只包含包含此html的父模板,并且有自己的控制器。子模板是菜单选择的结果 因此,无论何时选择菜单项,都会加载模板,并且控制器中的所有内容都会执行两次。它可以是ng交换机或ng include的产品吗 <span ng-switch on="selection"> <div ng-switch-when="0"> <div ng-include="'par

据我所知,此问题最常见的原因是当控制器包含在模板和路由提供程序中时。在我的例子中,路由器中只包含包含此html的父模板,并且有自己的控制器。子模板是菜单选择的结果

因此,无论何时选择菜单项,都会加载模板,并且控制器中的所有内容都会执行两次。它可以是ng交换机或ng include的产品吗

<span ng-switch on="selection">
    <div ng-switch-when="0">
        <div ng-include="'partials/one.html'" ng-controller="oneController"></div>
    </div>
    <div ng-switch-when="1">
        <div ng-include="'partials/two.html'" ng-controller="twoController"></div>
    </div>
    <div ng-switch-when="2">
        <div ng-include="'partials/three.html'" ng-controller="threeController"></div>
    </div>
</span>

编辑:

包含的部分不再包含控制器。我已经三次检查过,除了这段代码之外,没有提到这些控制器。1/2/3部分的内容如下所示,控制器仍然运行两次

<div>Nothing to see here.</div>
这里没什么可看的。

我在这里做一个有根据的猜测。。。但是您的
“'partials/one.html'
中是否也有
ng controller=“oneController”
?如果是这样,您需要从include div或partial中删除ng controller声明。

它不需要。我知道出现此错误的最常见方式是控制器意外嵌套。我用您提供的详细信息进行了一次plunkr,但我似乎无法复制您的结果。你能检查一下我是否遗漏了什么吗?也许可以在
选择中添加一块$watch
,并在它改变时注销它的值。