我正在使用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
上的示例代码答案 0 :(得分:0)
如果导航栏在ui-view之外,那么它不受ui-router绑定到该ui-view的控制器的影响。你应该有一个单独的控制器,即navbarController
,它可以与ng-controller
静态绑定到navbar元素,与ui-view分开。在该控制器中,您可以添加所有页面上都可见的共享代码。在导航栏上添加HomeCtrl
实际上也不起作用,因为那样你只需要在页面上有两个相同控制器的实例。
答案 1 :(得分:0)
所以我为navbar创建了一个指令并将其加载到基础模板上,现在可以使用