或者更好的问题是,应该一个指令包含一个控制器?角度指令是否可以包含控制器?
由于分离的原因,我的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