如何在angularjs中对RenderBody()使用ui-view

vsdwdz23  于 6个月前  发布在  Angular
关注(0)|答案(2)|浏览(43)

我有一个带有@RenderBody()的标记html:

<div layout="column" class="relative" layout-fill role="main">
    <md-toolbar class="md-hue-2">
        <div class="md-toolbar-tools">
            <md-button class="md-icon-button" aria-label="Settings" ng-disabled="true">
                    <md-icon md-svg-icon="navigation:menu"></md-icon>
            </md-button>

            <md-button ui-sref="dashboard">Dashboard</md-button> 
            <md-button ui-sref="home">Home</md-button> 
        </div>
    </md-toolbar>
    <md-content layout-fill md-padding>
        <div id="main-content" ui-view="">
            @RenderBody()
        </div>
    </md-content>
</div>

字符串
这里的js:

app.config(function ($stateProvider, $urlRouterProvider, $locationProvider) {

$urlRouterProvider.otherwise('/Home/Index');

$stateProvider
    .state('home', {
        url: '/Home/Index',
        templateUrl: '/Home/Index' // corresponds to an MVC partial route
    })
    .state('dashboard', {
        url: 'Home/Dashboard',
        templateUrl: '/Home/Dashboard' // corresponds to an MVC partial route
    })
});


结果是它自己的视图在一个视图中。我不能弄清楚。下面是输出:x1c 0d1x

lawou6xi

lawou6xi1#

我在我的一些应用程序中看到这个问题。你的布局加载了两次。你所需要做的就是在从uiroute渲染时“使你的布局为空”,如下所示。将此添加到Index.cshtml页面的顶部。

@{ 
    Layout = null;
}

字符串
或者在内容div外部加载ui视图

<md-content layout-fill md-padding>
        <div id="main-content">
            @RenderBody()
        </div>
    </md-content>
  <ui-view></ui-view>


或者你可以使用viewContentLoaded,它在使用angular中的uirutter时在DOM加载后触发,如下所示:

//trigger events after DOM content load
                $scope.$watch("$viewContentLoaded",
                    function() {
                        if (document.getElementsByTagName("header").length === 2) {
                            document.getElementsByTagName("header")[1].remove();
                        }
                        if (document.getElementsByTagName("footer").length === 2) {
                            document.getElementsByTagName("footer")[1].remove();
                        }
                    });

v2g6jxz6

v2g6jxz62#

我知道这是一个老问题,但是,这帮助我解决了这个问题。基本上,我有类似的代码,我结合了Ravi Kiran的答案:
我把它放在我的'Index.cshtml'的顶部,在我的情况下也是'Main.cshtml'(不起作用):

@{ 
    Layout = null;
}

字符串
但我加了这个:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}


我的'布局.cshtml'有这个:

<div ui-view="mainView">
        @RenderBody()
</div>

相关问题