AngularJS $位置而不模板(AngularJS $location without temp

2019-09-18 10:47发布

我想用$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直接。

Answer 1:

使用源,卢克:-) 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”,并找出如何/为什么它被播出。



文章来源: AngularJS $location without templates