AngularJs on-click 未在基本模板中触发
AngularJs on-click not firing in base template
我正在使用 AngularJs 和 Firebase,尝试让 Angularfire 用户身份验证正常工作。但是遇到了一些问题。
所以我在导航中有一个 on-click 事件,它将弹出用户身份验证 windows。
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
,那么它就可以工作了。
如何修复它,使每个页面的导航都一样。我有一个临时解决方案,即将 body 中的所有内容作为部分加载。但这意味着我必须在每个部分重复我的导航代码,我不想那样做。
是的...我在导航上试过 ng-controller="HomeCtrl"
,没有必要这样做。 (参见此处:)
编辑:Plunker
上的示例代码
如果导航栏在 ui-view 之外,那么它不受 ui-router 绑定到 ui-view 的控制器的影响。您应该有一个单独的控制器,即 navbarController
,它可以使用 ng-controller
静态绑定到导航栏元素,与 ui-view 分开。在该控制器中,您可以添加所有页面上可见的所有共享代码。在导航栏上添加 HomeCtrl
实际上也不起作用,因为那样的话页面上将只有同一控制器的两个实例。
所以我为导航栏创建了一个指令并将其加载到基本模板上,现在可以使用了
我正在使用 AngularJs 和 Firebase,尝试让 Angularfire 用户身份验证正常工作。但是遇到了一些问题。
所以我在导航中有一个 on-click 事件,它将弹出用户身份验证 windows。
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
,那么它就可以工作了。
如何修复它,使每个页面的导航都一样。我有一个临时解决方案,即将 body 中的所有内容作为部分加载。但这意味着我必须在每个部分重复我的导航代码,我不想那样做。
是的...我在导航上试过 ng-controller="HomeCtrl"
,没有必要这样做。 (参见此处:)
编辑:Plunker
上的示例代码如果导航栏在 ui-view 之外,那么它不受 ui-router 绑定到 ui-view 的控制器的影响。您应该有一个单独的控制器,即 navbarController
,它可以使用 ng-controller
静态绑定到导航栏元素,与 ui-view 分开。在该控制器中,您可以添加所有页面上可见的所有共享代码。在导航栏上添加 HomeCtrl
实际上也不起作用,因为那样的话页面上将只有同一控制器的两个实例。
所以我为导航栏创建了一个指令并将其加载到基本模板上,现在可以使用了