2016-02-11 79 views
1

我正在使用的模塊目前是另一個模塊的複製粘貼代碼。顯然這是不對的,所以我試圖包含共享資源(一個模塊)來消除這種冗餘。Angular - 如何在模塊之間共享控制器?

這裏是設置的草圖:

angular.module('shared', []); 
angular.module('shared').controller('SharedController', SharedControllerFunc); 

function SharedControllerFunc(/*params*/) { 
    /*logic*/ 
} 

angular.module('app', ['shared']); 
angular.module('app').controller('myController', myControllerFunc); 

console.log(angular.module('app').controller('SharedController')); 
//looks good! 

//HTML template 

<div ng-controller="myController"> 

    <div ng-controller="SharedController" ng-include="other-template.html"></div> 

</div> 

而且SharedController不存在。

我的問題是:我如何獲取SharedController正確解決?我嘗試使用$controller服務,並在MyController的範圍內創建SharedController,但它看起來像,因爲它與傳遞依賴關係有關(Unknown provider錯誤SharedController)。

必須有一個乾淨,簡單的方法來做到這一點,我忽略了。

+0

如果您註釋掉將控制器重新定義爲null的'console.log',則可以正常工作。請參閱[JSFiddle上的DEMO](https://jsfiddle.net/efae1hey/)。 – georgeawg

回答

1

我做了一個例子,你在這裏:http://plnkr.co/edit/dBDyYPd3ZoUVdXngu52t?p=preview

如果你有2個文件與模塊 - 應用和共享:

//app.js 
var app = angular.module('app', ['shared']); 
app.controller('myController', myControllerFunc); 

function myControllerFunc($scope) { 
    $scope.test = 'myControllerFunc'; 
    console.log('myControllerFunc called'); 
} 


//shared.js 
var shared = angular.module('shared', []) 
shared.controller('SharedController', SharedControllerFunc); 

function SharedControllerFunc($scope) { 
    $scope.test = 'SharedControllerFunc'; 
    console.log('SharedControllerFunc called'); 
} 

以後可以繼承另一個裏面一個控制器:

<div ng-controller="myController"> 
{{test}} 
    <div ng-controller="SharedController"> 
    {{test}} 
    </div> 
</div> 
+0

原則上它的工作原理!在我的情況下,它沒有。原來是解決依賴問題。所以就這樣了。 – Jefftopia

1

通常重複使用ng-controller中的控制器表示需要指令或服務來執行常見任務並保留cod ebase DRY。但是,同一個控制器可能會在幾個指令或路由中重用。

列出的代碼很好。除此之外:

console.log(angular.module('app').controller('SharedController')); 

controller方法不適用於返回註冊控制器的工廠功能。它基本上等同於覆蓋控制器

angular.module('app').controller('SharedController', undefined); 
+0

我其實並不知道最後一點,因爲我從來沒有醫生編碼這個結構不好。謝謝! – Jefftopia

相關問題