ng-include - 多次调用Controller

mar*_*kus 7 angularjs angularjs-ng-include

情况:

我试图包括一个部分,ng-include而不需要任何路由.我只想动态地包含许多特定部分.这或多或少看起来像:

<div ng-controller="SomeController">
    //This controller defines a $scope.getPartial(id)
    <ng-include src="getPartial(something.id)"></ng-include>
</div>
Run Code Online (Sandbox Code Playgroud)

它有效,部分包括在内.但是看着控制台,我可以看到控制器被多次调用,第一次被调用时,我得到了404

GET path/to/partials/undefined.html [HTTP/1.1 404 Not Found 162ms]

当包含首次出现时,似乎没有定义something.id.

问题:

  • 如何在不创建新范围的情况下简单地包含部分内容?
  • 如果那是不可能的,我怎么能确定,控制器只被调用一次?
  • 我怎么能避免404?

我对AngularJS很新,因此可能会对事情做出错误的假设或错过明显的事情,请赐教.

Ste*_*wie 6

  1. ngInclude按定义创建一个新范围,因此您无法轻易绕过它.并且,由于嵌套的作用域相互继承,因此新创建的作用域将能够读取您的作用域SomeController,因此您不应该对新作用域有任何问题.
  2. ngInclude的src属性将在每个$ digest范围内重新评估,因此您无法阻止它重复调用控制器的方法.就此而言,您需要确保您的方法轻巧快速,并在给定相同输入的情况下返回相同的输出
  3. 当id尚未定义时,您可以通过返回空字符串""来避免初始化404:

 

$scope.getPartial = function(id){
  if(!id){
    return "";
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • +1.我还想补充一点,在角度很多的东西中会被多次调用或者有时会被调用.你需要将你的理解从命令转变为声明.想想css.您不关心(通常)浏览器重新绘制的次数,根据样式/类更改进行重排 (7认同)