在运行时动态分配ng-controller

Mat*_*nya 7 javascript angularjs

我有一种情况需要动态更改控制器,以便相应地影响范围变量.一般结构:

<div ng-controller="GameController">
   // some general HTML which fits all types of games
    <div ng-controller="someScopeVar"> // Type of game
      // some game-type-specific ng-models that should respond to the change of controller, i.e scope
    </div
</div>
Run Code Online (Sandbox Code Playgroud)

我在这里看到它可以在一个内部完成ng-repeat.可以在它之外完成吗?换句话说,我可以告诉角度将其读作变量而不是字符串文字吗?

Rad*_*ler 3

正如评论中所讨论的,angular有一个非常强大的功能/库来处理这些场景 - (及其强大的wikiui-router

ui-router是需要开发功能块的答案 -状态,而不是在 view/url 中思考(从主页引用)

AngularUI Router 是 AngularJS 的路由框架,它允许您将界面的各个部分组织到状态机中。与Angular ngRoute 模块中的$route服务不同,Angular ngRoute 模块是围绕 URL 路由组织的,它UI-Router是围绕states组织的,可以选择附加路由以及其他行为。

有一些非常有趣的博客文章:

...AngularJS 的新路由器最有趣的事情不是路由器本身,而是它附带的状态管理器。您不是以控制器/视图为目标来呈现给定的 url,而是以状态为目标。状态以层次结构进行管理,提供父状态的继承和页面组件的复杂组合,同时本质上保持声明性......

...ui-router完全拥抱路由系统的状态机本质。它允许您定义 states,并将您的应用程序转换到这些状态。真正的胜利在于它允许您解耦嵌套状态,并以优雅的方式进行一些非常复杂的布局。

正是我们需要的点 - 解耦子状态...实际上动态更改控制器...可以通过 url 更改或只是状态更改(一个兄弟子项而不是其他没有 url 更改的子项)

您需要以不同的方式考虑您的路由,但是一旦您了解基于状态的方法,我认为您会喜欢它......

最后,有几个链接,我将其标记为 ui-router 的圣杯

  • 示例应用程序。在实际操作中我们可以看到 ui-router 状态机是如何工作的。我们可以加载列表作为父状态,然后我们可以选择行项目,它们确实代表它们自己的子状态...而父状态没有重新加载这里我试图更详细地解释它)

  • state.js- 示例应用程序的基本代码段。这是我见过的最好的记录代码片段之一...花了一些时间来浏览,这将为您提供 80% 的答案:How ui-Routerisworking

根据我的经验,这确实适合小型应用程序以及大型系统......喜欢它......