我想用$locationProvider
在AngularJS服务,而不在我的渲染一个新的HTML模板ng-view
。
我有一个div
是经由需求所示元件ng-show
绑定到数据元素的存在。 我想通过接线这个浏览器的位置$locationProvider
但留在同一个模板内。
模板:
<div> other stuff ... </div>
<div ng-show="model">{{ model.element }}</div>
控制器:
Controller = function($scope, $location) {
$scope.show = function() {
$scope.model = model; // show div
}
$scope.hide = function() {
$scope.model = null; // hide div
}
}
我无法弄清楚如何将整合$location
服务在于此。 如果它被设置与AngularJS也覆盖位置history.pushState
直接。
使用源,卢克:-) http://code.angularjs.org/1.0.0/angular-1.0.0.js
如果你看一下ngViewDirective(实际上是超级简单),它只是抓住了“$ routeChangeSuccess”事件,并相应地改变看法。
所以,你可以赶上$ routeChangeSuccess然后注入$路由到您的控制器,检查新的路线是你想要的,并相应地显示。 (我认为:d)
这可能会实现(未经测试):
//declare a route so angular knows to broadcast about it when it's hit
//We aren't declaring any actions for the route though,
//since below we define custom actions
myApp.config(function($routeProvider) {
$routeProvider.when('/superman', {});
});
function SupermanCtrl($scope, $route) {
$scope.$on('$routeChangeSuccess', function() {
//If this doesn't work, console.log $route.current to see how it's formatted
if ($route.current == '/superman')
$scope.show = true;
else
$scope.show = false;
});
}
我希望它的作品,如果它不应该是足够的开始。 我建议你阅读ngViewDirective,如果这也不行寻求“$ routeChangeSuccess”,并找出如何/为什么它被播出。