ng-include - 多次调用Controller

时间:2013-06-18 10:58:03

标签: 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>

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

  

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

当第一次进行包含时,似乎没有定义something.id.

问题

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

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

1 个答案:

答案 0 :(得分:6)

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