解析包含ng的视图的变量

时间:2016-04-23 12:17:43

标签: angularjs resolve angularjs-ng-include

这是我的app.js:

app.config(['$routeProvider',
    function ($routeProvider) {
        $routeProvider.when('/', {
            templateUrl: 'partials/home.html',
            controller: 'homeController',
            resolve: {
                loggedUser: getLoggedUser
            }
}]);

函数getLoggedUser()返回一个在userService找到登录用户时解析的promise。在我的index.html中,我包含了一个导航栏:

<ng-include src="'partials/navbar.html'" ng-controller="homeController"></ng-include> // Navbar
<div ng-view></div> // Angular views

问题是:

  1. ng-controller不能与resolve一起使用,因为它会创建一个'unknown provider'的AngularJs错误。因此,ng-include会为'/'路线带来麻烦。
  2. 我不知道如何为导航栏指定解析,因为它没有路径,但是包含在index.html的每个视图中。导航栏需要显示登录用户的名称。
  3. EDIT1: 我在myPromise.$$state.value中返回homeController并删除了resolve {...},尝试了一个丑陋的解决方案。但是,感觉我不应该使用像这样的$ q承诺。还有其他建议吗?

    EDIT2: 我的意思是由于ng-controller =“”,loggedUser是未知的。以下是解释:AngularJS, resolve and unknown provider

2 个答案:

答案 0 :(得分:0)

我认为您收到有关未知提供商的错误的原因是&#39;是你需要将服务userService注入解析函数:

app.config(['$routeProvider',
function ($routeProvider) {
    $routeProvider.when('/', {
        templateUrl: 'partials/home.html',
        controller: 'homeController',
        resolve: {
            loggedUser: function(userService) {
                return userService.getLoggedUser();
            }
        }
}]);

答案 1 :(得分:0)

您可以将导航栏与应用的其余部分分开。 使用像

这样的东西
<body>
  <div ng-controller = "navbarController as nav">
    <div ng-show=" userIsLoggedIn"> <!-- show navbar only if true -->
      <!-- navbar markup-->
    </div>
  </div>
  <div ng-view> <!-- display other templates here --> </div>
</body>

然后,您可以使用service来存储用户的登录状态和凭据。由于可以在应用范围内访问服务,因此您可以在navbarController中访问其数据(例如用户名)。