在没有服务的情况下从ng-include中继承外部控制器的范围?

时间:2015-02-03 17:25:45

标签: javascript angularjs angularjs-scope

在AngularJS中,是否可以从包含的部分内部继承父控制器的范围,而不是通过注入的服务传递数据?

示例案例:

让我们说ParentCtrl的范围如下:{ testData: 'testing stuff' }

<div ng-controller="ParentCtrl">
    Here we're defined: {{testData}}
    <div ng-include="'partial.html'"></div>
</div>

partial.html内:

<em>Inherited: {{testData}}</em>

因此,部分人甚至不需要它自己的控制器。如果这是不可能的,你只能通过服务在控制器之间传递注入的数据,为什么Angular会这样做?

2 个答案:

答案 0 :(得分:5)

是的,这实际上是默认情况下的工作原理。 ng-include始终会创建一个新范围,并且:

  

A&#34;儿童范围&#34; (原型)从其父级继承属性   范围。

See the docs on Scope.

Here就是一个例子。

修改另外,我刚刚发现原始问题中存在语法问题。模板应该用单引号括起来。将<div ng-include="partial.html"></div>更改为<div ng-include="'partial.html'"></div>

答案 1 :(得分:0)

ngInclude documentation中使用示例Plunkr,我可以从局部内部访问父控制器的范围。例如,将template1.html的内容更改为:

Content of template1.html {{ template }}

根据文档,ngInclude创建了一个新的范围,这意味着您需要观察角度最佳实践,并在您的范围内设置一个点&#34; (访问范围上的对象而不是原始值),以避免损坏引用的问题。您可以查看this Stack Overflow question以获取更多信息。