我在该视图中有一个控制器名称为"Listctrl"的视图,我想使用另一个名为"LocationCtrl"的控制器。目前,我这样做是这样的:

路由

 .state('list', {
        url: '/list',
        templateUrl: 'templates/list.html',
        controller: "ListCtrl",
        cache: false
      })


HTML(list.html)

<ion-view ng-init="ini()" ng-controller="LocationCtrl">
  <ion-header-bar class="banner-top ext-box" align-title-h="left">
    <div class="int-box2"><h2 id="s_back1">STORIE</h2></div>
  </ion-header-bar>
<ion-content class="has-header has-footer no-bgColor start" overflow-scroll="false" has-bouncing="false">
<div class="container-list">


我应该如何正确解决这个问题?我需要两个控制器用于同一视图,但是在不同的地方,因为我想在不同的视图中重用控制器代码。

目前<ion-view ng-init="ini()" ng-controller="LocationCtrl">
不运行LocationCtrl

任何帮助,不胜感激!

最佳答案

一个视图不可能有两个控制器,因为这没有意义。如果您具有应共享的功能,请使用控制器继承,但是仅当LocationCtrl将其方法添加到$scope时才有可能:

var app = angular.module('angularjs', []);

app.controller('LocationCtrl', function($scope) {
  // I have functionality to share
});

app.controller('ListCtrl', function($scope, $controller) {
  $controller('LocationCtrl', {$scope: $scope}); // This adds properties to ListCtrl's scope
});


另一种方法是将ng-controller="LocationCtrl"放在包装div中:

<ion-view ng-init="ini()">
  <div ng-controller="LocationCtrl">
       <ion-header-bar class="banner-top ext-box" align-title-h="left">
          <div class="int-box2"><h2 id="s_back1">STORIE</h2></div>
       </ion-header-bar>


但这似乎不是一个好选择。更好的方法是使用LocationCtrl上定义的功能创建组件/指令,并在您的视图中的某处使用它:

<ion-view ng-init="ini()">
  <component-with-location-ctrl-functionality></component-with-location-ctrl-functionality>

08-28 11:46