Angularjs 在angular应用程序中添加局部视图和控制器

Angularjs 在angular应用程序中添加局部视图和控制器,angularjs,angularjs-ng-include,Angularjs,Angularjs Ng Include,我正在优化Angular应用程序的性能。我正在使用ng include添加局部视图及其控制器。下面是代码片段 <!--show term rule view--> <div id="showTermRule" ng-controller="TermRuleController as term" ng-if="showTermRule"> <div data-ng-include src="'/Relevancy/termRule/termRule.html'"

我正在优化Angular应用程序的性能。我正在使用ng include添加局部视图及其控制器。下面是代码片段

<!--show term rule view-->
<div id="showTermRule" ng-controller="TermRuleController as term" ng-if="showTermRule">
  <div data-ng-include src="'/Relevancy/termRule/termRule.html'" ng-if="!isPublsihed"></div>
  <div data-ng-include src="'/Relevancy/termRule/publishedTermRule.html'" ng-if="isPublsihed"></div>
</div>
<!--show function rule view-->
<div id="showFunctionRule" ng-controller="expressionBuilderController" ng-if="showFunctionRule">
  <div data-ng-include src="'/Relevancy/functionRule/functionRule.html'" ng-if="!isPublsihed"></div>
  <div data-ng-include src="'/Relevancy/functionRule/publishedFunctionRule.html'" ng-if="isPublsihed"></div>
</div>

<div id="showQueryRule" ng-controller="queryBuilderController" ng-if="showQueryRule">
  <div data-ng-include src="'/Relevancy/queryRule/queryRule.html'" ng-if="!isPublsihed"></div>
  <div data-ng-include src="'/Relevancy/queryRule/publishedQueryRule.html'" ng-if="isPublsihed"></div>
</div>
我面临的问题是,当我在子控制器(比如TermRuleController)中使用ng时,它无法从父控制器捕获广播事件。据我所知,这是因为当我广播添加控制器的eventdiv元素时,它并没有被添加到DOM中。 我用ng show试过同样的方法。它当时正在工作,但加载页面需要很长时间。是否有人可以建议添加局部视图和控制器的正确方法。经过一些研究,我发现我可以使用指令来代替ng include。我还不确定。
另外,我想写服务而不是广播可能会解决这个问题,但我的问题是,添加具有不同控制器的局部视图是否正确

使用ngInclude将模板拆分为部分时,需要记住。将控制器应用于局部视图中的图元,而不是将控制器应用于布局模板中的图元。这样,您就不需要以其父对象的作用域为目标,按作用域将控制器耦合在一起。下面是一个示例:Layout.html

<div ng-controller="LoginCtrl">
    <div ng-include="login.html"></div>
</div>

Login.html:

<form-field ng-field-data="{{login.usr_name}}"></form-field>
<form-field ng-field-data="{{login.password}}"></form-field>

在上述情况下,您可能希望在 LoginCtrl控制器,但login的作用域为partial login.html 会更深一步。相反,在同一台计算机上定义控制器 级别为部分(见下文)

Layout.html:
Login.html:

<div ng-controller="LoginCtrl">
    <form-field ng-field-data="{{login.usr_name}}"></form-field>
    <form-field ng-field-data="{{login.password}}"></form-field>
</div>

这样,父控制器和子控制器的$scope将是相同的。 因此,在您的情况下,您不必广播事件,它将直接在子控制器中可用


希望,这篇文章能帮助您解决所面临的问题。

在使用ngInclude将模板拆分为部分时,您需要牢记这一点。将控制器应用于局部视图中的图元,而不是将控制器应用于布局模板中的图元。这样,您就不需要以其父对象的作用域为目标,按作用域将控制器耦合在一起。下面是一个示例:Layout.html

<div ng-controller="LoginCtrl">
    <div ng-include="login.html"></div>
</div>

Login.html:

<form-field ng-field-data="{{login.usr_name}}"></form-field>
<form-field ng-field-data="{{login.password}}"></form-field>

在上述情况下,您可能希望在 LoginCtrl控制器,但login的作用域为partial login.html 会更深一步。相反,在同一台计算机上定义控制器 级别为部分(见下文)

Layout.html:
Login.html:

<div ng-controller="LoginCtrl">
    <form-field ng-field-data="{{login.usr_name}}"></form-field>
    <form-field ng-field-data="{{login.password}}"></form-field>
</div>

这样,父控制器和子控制器的$scope将是相同的。 因此,在您的情况下,您不必广播事件,它将直接在子控制器中可用


希望,本文能帮助您解决所面临的问题。

将指令与模板一起使用将指令与模板一起使用感谢这个简单的解决方案!我认为在这里使用指令更合适。不是吗?这完全取决于你,你可以用任何一种方式来做。谢谢这个简单的解决方案!我认为在这里使用指令更合适。不是吗?这完全取决于你,你可以用任何一种方式。