或者更好的問題是,應該一個指令包含一個控制器?角度指令是否可以包含控制器?
由於分離的原因,我的index.html是一個簡單的文件。一切都通過模板呈現給它。所以,我的index.html是真實簡單:
<body ng-app="myapp"><mainmenu></mainmenu><div ng-view></div></body>
我並不真的需要一個mainmenu
指令,但它可以讓我把菜單在一個單獨的模板文件。主菜單本身包含用戶信息,登錄/註銷和搜索框。
<div class="leftmenu" ng-show="isLogin()">
<ul class="menu">
<li><a href="/part1">Part1</a></li>
<li><a href="/part2">Part2</a></li>
<li><a href="/part3">Part3</a></li>
</ul>
<div ng-controller="Search" class="Search><input type="text" ui-select2="s2opts" style="width:250px;" ng-model="search" data-placeholder="search"></input></div>
</div>
<div class="rightmenu">
<ul ng-show="isLogin()" class="menu">
<li><a href="/account">My Account</a></li>
<li><a href="/logout" ng-click="logout()">Logout</a></li>
</ul>
<ul ng-show="!isLogin()" class="menu">
<li><a href="/login">Login</a></li>
<li><a href="/register">Register</a></li>
</ul>
</div>
因此,菜單部分有自己的控制器,並且在兩部分之間嵌入了自己的搜索。
當然,我的mainmenu
指令單元測試失敗,因爲SearchController
未定義。但是這讓我想知道我是否正在討論這個錯誤。我是否應該像這樣,在其中定義了一個明確的ng-controller
的html部分?這不會造成各種奇怪的依賴嗎?
我應該如何更好地構造這個?包含一個search
指令,以便我可以單獨對它進行單元測試?什麼感覺錯了這裏...結構
UPDATE:
按照要求,一個基本的小提琴:http://jsfiddle.net/nj4n44zx/1/
如果可以,我會在這裏添加一個有偏見的評論。如果你正在談論渲染模板視圖等,我會去'angular.ui.router'。令人敬畏的路由功能,真棒狀態控制。它使測試更容易。否則,對我來說,指令是可重用的。但是,儘管如此,你仍然選擇了設計。 – CozyAzure 2014-10-03 08:12:47
偏向好;至少這是我可以同意或不同意的。無偏見是無聊的。 :-)所以,你可能是對的,我會再看看angular.ui.router(因爲我使用了很多angular.ui)。但是,我想以任何方式解決核心架構問題。 – deitch 2014-10-03 08:14:41