0

与此问题相关:如何创建一个动态导航,将允许的菜单项传递给它?

基本上,我在任何视图之外都有导航。导航需要显示用户可以访问的菜单项。

我使用如下指令创建导航标记:

<tree family="treeFamily"></tree>

treeFamily用于构建导航菜单的数据在哪里。

但是,由于我的导航在任何视图之外,它没有控制器,因此没有名为treeFamily. 这意味着该指令没有获取任何数据来创建导航。

我最初以为我可以只为菜单项的数据注入一个服务,但是我看不到告诉 angular 指令使用从注入的服务中获取的数据进行绑定。

似乎唯一可行的另一种方法是拥有一个名为 treeFamily 的 $rootScope 变量,并将指令生成的标记绑定到该变量。

4

2 回答 2

0

如果您不想在$rootScope此处使用变量,这是一个有点 hacky 的解决方案,但您可以通过元素获取范围。

例子。

假设您的数据应用于测试控制器,因此您拥有这样的元素

<div id="test" ng-controller="test">

你可以使用 jQuery 来做这个例子(不是必需的)

$('#test').scope().treeFamily

在那里,您可以访问需要从中获取数据的范围,演示正在进行中。

演示:http: //jsfiddle.net/hq26h/

在演示中,当指令在控制器之外时,随机指令正在从测试控制器访问treeFamily数据。

如果您不希望您的服务数据可绑定,您可以这样做

app.directive('something', function( $someNavDataService ) {
    return function( $scope ) {
       $scope.navData = $someNavDataService;
    }; 
});
于 2013-09-12T22:51:14.580 回答
0

我仍然认为你想看看 angular-ui 路由器,正如我在上一个问题中提到的那样

https://github.com/angular-ui/ui-router

但是,我在没有 angular-ui-router 的情况下执行此操作的方法是创建服务,然后在声明时将服务注入到指令中,并按照http://docs.angularjs使用其中的数据.org/guide/directive

例如:

angular.module('yourModule').service('yourService', function() {
   // define your service
});

angular.module('yourModule').directive('yourDirective', function(yourService) {
  return {
     link: function postLink(scope, element, attrs) {
       // you can now define your directive and access your yourService service
     }
  };
});
于 2013-09-12T22:58:00.733 回答