7

情况

我试图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 相当陌生,因此可能会对某些东西做出错误的假设或遗漏明显的东西,请赐教。

4

1 回答 1

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

 

$scope.getPartial = function(id){
  if(!id){
    return "";
  }
  ...
}
于 2013-06-18T11:18:58.447 回答