AngularJs点击不在基础模板

时间:2015-05-24 02:31:25

标签: javascript angularjs firebase angularfire

我正在使用AngularJs和Firebase,尝试让Angularfire用户身份验证正常工作。但有一些问题。

所以我在导航中有一个点击事件,会弹出用户的auth窗口。

的index.html

<ul class="nav navbar-nav navbar-right">
   <li><a href="#/">Home</a></li>
   <li ng-hide="authData"><a href="" ng-click="auth.$authWithOAuthPopup('google')">Login</a></li>
   <li ng-show="authData"><a href="" ng-click="auth.$unauth()">Logout</a></li>
</ul>

app.js

app.factory("Auth", ["$firebaseAuth", function($firebaseAuth){
  return $firebaseAuth(ref);
}]);

app.controller("HomeCtrl", ["$scope", "Auth", "currentAuth", function($scope, Auth, currentAuth) {
  $scope.auth = Auth;
  $scope.auth.$onAuth(function(authData) {
    $scope.authData = authData;
  });
}]);

$stateProvider.state("home", {
  controller: "HomeCtrl",
  url: "/",
  templateUrl: "partials/home.html",
  resolve: {
     "currentAuth": ["Auth", function(Auth) {
        return Auth.$waitForAuth();
    }]
  }
})

当我点击导航中的Login时,没有任何反应,但如果我将代码作为部分文件加载到ui-view,那么它就可以了。

如何修复它,以便在每个页面的导航器上都能正常工作。我有一个临时解决方案,即将身体中的所有东西作为局部装载。但这意味着我必须在每个部分重复我的导航代码,我不想这样做。

是的...我在导航栏上尝试了ng-controller="HomeCtrl",没有必要这样做。 (见这里:https://stackoverflow.com/a/27975745/3927928

编辑:Plunker

上的示例代码

2 个答案:

答案 0 :(得分:0)

如果导航栏在ui-view之外,那么它不受ui-router绑定到该ui-view的控制器的影响。你应该有一个单独的控制器,即navbarController,它可以与ng-controller静态绑定到navbar元素,与ui-view分开。在该控制器中,您可以添加所有页面上都可见的共享代码。在导航栏上添加HomeCtrl实际上也不起作用,因为那样你只需要在页面上有两个相同控制器的实例。

答案 1 :(得分:0)

所以我为navbar创建了一个指令并将其加载到基础模板上,现在可以使用