【问题标题】:AngularJs on-click not firing in base templateAngularJs on-click没有在基本模板中触发
【发布时间】:2015-05-29 10:05:15
【问题描述】:

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

所以我在 nav 中有一个点击事件,它会弹出用户身份验证窗口。

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 上的示例代码

【问题讨论】:

  • $waitForAuth() 只等待身份验证状态解决。它不会等到身份验证状态解析为有效登录(可能为空)。如果你想在路由中使用它,你应该在 $waitForAuth() 解析为 null 时重定向到“请验证”屏幕,然后在之后重定向回主页。
  • @Kato 我是 Angular 新手,我该怎么做?
  • 查看the guide,它有一个关于路由的部分,以及angularFire-seed,它实现了这些策略。认真阅读这些文档,您最好在 Angular 教程中做同样的事情。

标签: javascript angularjs firebase angularfire


【解决方案1】:

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

【讨论】:

  • 我厌倦了创建一个单独的控制器并将其绑定到导航栏,但它给了我错误未知的提供者。请参阅我在底部引用的链接。
  • 您的链接在部分内容中专门使用 ng-controller 进行了描述。你有完全相反的问题。
  • 好吧,我也尝试将NavCtrl 绑定到导航栏,这就像我的HomeCtrl 一样,它给了我同样的错误:Unknown provider: currentAuthProvider &lt;- currentAuth &lt;- NavCtrl 我很确定我的代码中的其他所有内容都是正确的语法和工作原理。
  • 你能发布代码吗? Unknown provider 应该很容易找到......
  • 代码见plunker,由于index.html上的ng-controller=NavCtrl,页面加载出错
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多