【问题标题】:ng-app and ng-controller in partial view not working部分视图中的 ng-app 和 ng-controller 不起作用
【发布时间】:2018-12-17 21:15:35
【问题描述】:

我有一个通用布局页面,我在其中调用_header 部分页面,然后渲染正文。在渲染正文中,我有几个索引页面,它们有自己的 ng 控制器。当我为_header 部分创建ng-controller 时,我无法获得这些范围值,而是在正文部分获得{{header.label}}

如何为部分页面和正文设置单独的模块和控制器。我认为ng-appng-controller 是造成一些问题的原因。任何帮助表示赞赏。

这是在我的标签内

<div>
        @Html.Partial("_Header")
    </div>

@RenderBody()

【问题讨论】:

    标签: c# angularjs asp.net-mvc razor angularjs-scope


    【解决方案1】:

    如果您的 ng-controller 在 @RenderBody 内,则您的 $scope 和控制器在此标记之外无效。

    $rootScope 在控制器之间共享,但我认为这是一种不好的做法。

    如果你愿意,你可以嵌套控制器,但你必须使用“as”字to refer the controllers

    或者你可以用他自己的控制器创建一个指令

    【讨论】:

    • 你的意思是说我应该在布局页面中添加ng-app,在部分页面_header中添加ng-controller。另外,Renderbody 页面和部分页面内部使用的控制器不相互通信?
    • ng-app 应该包装所有的控制器(例如 body、html 标签),然后在你的 header 部分用 ng-controller 标签包装所有的东西。使用另一个 ng-controller 将您的页面包裹在 RenderBody 中。在控制器中。如果你这样做 $scope.a = "hello"。 {{a}} 只会在定义控制器的标签之间显示“hello”。控制器可以相互通信你可以寻找不同的方式(有很多)
    • 我是这样修改的。还是行不通。我应该在哪里调用外部 javascript 文件。 &lt;body ng-app="app"&gt; &lt;div ng-controller="Cntrl1"&gt; @Html.Partial("_Header") &lt;/div&gt; @RenderBody() &lt;/body&gt;
    【解决方案2】:

    您可能已经这样做了,但是由于问题没有提到这一点,因此您有两个控制器,例如一个从您的标头加载,另一个从 RenderBody 加载:

    <div class="header" ng-controller="headerController">
        [other html here]
    </div>
    
    <div class="body" ng-controller="bodyController">
        [other html here]
    </div>

    您也需要为这些添加控制器,这应该可以正常工作。您的ng-app 需要在父级添加,可以在_Layout.cshtml 页面中。

    【讨论】:

    • 我是否需要在 _Layout.cshtml 页面本身中添加 ng-controller 和 ng-app? ng-app 名称在部分页面和 renderbody 页面中应该相同,不是吗?
    猜你喜欢
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多