多个ng-app的相同控制器

时间:2015-06-08 14:46:57

标签: javascript angularjs

我有一个网页,有不同的documents.php,每个文件都有ng-app和一些控制器。 (我的网页很容易发现)。

player.php:(用户可以使用音频播放器播放音乐)

<div class="navbar-fixed" ng-controller="menuController as menu2">
<?php include('includes/menu.php'); ?>
</div>
<div ng-controller="InteractiveController as interactCtrl">
//some code
</div>

panel_admin.php:(用户可以修改其数据和网页的部分数据)

<div class="navbar-fixed" ng-controller="menuController as menu2">
<?php include('includes/menu.php'); ?>
</div>
<div ng-controller="AdminController as AdminCtrl">
//some code
</div>

player.php和panel_admin.php各自的 player.js和panel_admin.js 及其.controllers。

player.js:

var decibelsInteractive = angular.module("decibels-interactive", []);
decibelsInteractive.controller('InteractiveController', function ($scope, $log) {

panel_admin.js:

var adminControl = angular.module("decibels-admin", []);
adminControl.controller("AdminController", function($scope){

现在,我在menu.php中有菜单栏,我在 player.php panel_admin.php 文档中使用。我导入它是因为我不想在每个需要使用菜单的页面中重复代码(menu.php有管理用户选项,注销等许多选项......)。我还创建了一个 menu.js ,只在一个文档中包含特定方法,而不是在25个文档中。

menu.php:(菜单是一个菜单栏,用户有一些选项,还有用户名和退出选项)

//this document only contains some html code

现在,我已尝试实施一个简单的代码(在 menu.js 中),这样我就可以在有多个ng-app时共享一个控制器。

Question with the code I've taken

menu.js:

angular.module('decibels-interactive', ['shared']); //player2.php
angular.module('decibels-admin', ['shared']); //panel_admin.php
var sharedModule=angular.module('shared',[]);

sharedModule.controller('menuController',['$scope',function($scope) {
alert("menuController");
}]);   
});

这很有效!!!但是,angular显示错误...(加载player.php)

错误:[ng:areq] http://errors.angularjs.org/1.2.25/ng/areq?p0=InteractiveController&p1=not%20a%20function%2C%20got%20undefined

当我加载panel_admin时,再次出现相同的错误,但是使用AdminController ...

似乎角度只检测每个.php中的第一个控制器,而无法找到第二个控制器。

我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以为共享代码创建一个文件,并在其中包含控制器代码。

// @file mySharedCode.js
var MySharedCode = MySharedCode || {};

MySharedCode.menuController = function($scope) {
    // controller logic
};

然后,在你的app.js文件中调用menuController函数

// @file app.js
sharedModule.controller('menuController', MySharedCode.menuController);

希望这是有道理的。