1

我有这个html:

<div ng-controller="MyCtrl">
  <div ng-view></div>
</div>

<script type="text/ng-template" id="/a">
  // SomeHtml with Angular templates
</script>

<script type="text/ng-template" id="/b">
  // SomeHtml with Angular templates
</script>

和:

angular.module('ngView', [], function($routeProvider, $locationProvider) {
  $routeProvider.when('/a', {
    templateUrl: '/a',
    controller: MyCtrl
  });

  $routeProvider.when('/b', {
    templateUrl: '/b',
    controller: MyCtrl
  });
});

控制器“MyCtrl”有一些引导代码,在第一次加载 html 时调用,这个引导代码设置了一些“/a”和“/b”模板都应该使用的状态。模板“/a”和“/b”将呈现在引导期间获得的数据以不同方式呈现。

我希望没有控制器并且仍然能够从我的模板访问 MyCtrl 范围。

4

3 回答 3

2

我会删除包装控制器,并让我的路线每个都有自己的控制器。如果这些控制器需要共享数据,那么我会将保存这些数据的专用对象添加到控制器的依赖项列表中。这是一个示例:https ://stackoverflow.com/a/9407953/410102

于 2012-12-28T16:39:51.960 回答
1

Angular 网站旁边说您应该指向一些不需要执行此操作的控制器,并且如果具有该ng-view属性的标签被包装到另一个具有 a 的标签中,ng-controller那么呈现的模板将能够像往常一样访问父范围。

于 2013-01-08T16:40:20.817 回答
0

您的模板控制器将有一个父控制器(您所谓的包装控制器),它继承。因此,您可以从包装控制器执行功能和访问属性。

function TemplateAController($scope) {
 ...
}

function WrappingController($scope) {
   $scope.execute = function() {
      ...
   }
    ...
   }

在您的模板中:

<a ng-click="execute()">Execute</a>
于 2012-12-28T16:09:49.550 回答