我正在使用ui-select创建一个包含多个视图的复杂页面。对于那些不知道每个视图是在用户选择标签时(或者在我的情况下是下拉菜单)通过ajax加载的人。视图传统上有自己的控制器和html模板。视图继承了它们所在的父页面的范围,但具有自己的子范围。
在我的情况下,我们的一些观点根本没有控制器。它们非常简单,我们只有html页面。问题是我希望他们能够在父页面的范围内的配置对象上切换布尔值,以关闭父页面上的某些控制字段。一切都已存在,多个页面使用这些视图,我只想扩展它们以在父级上切换一些内容。
我可以用三种方式做到这一点。我可以在我的ui-router中使用resolve方法在加载视图时显式切换我想要的字段,但是我必须在每个ui-router中为每个页面明确地执行此操作;没有很酷的代码重用。
我可以让我的ui-router加载一个控制器,目前我没有控制器,控制器也可以这样做。但是,这意味着手动添加一个在我使用视图时几乎不需要的控制器,并且再次感觉不像代码重用。
或者我可以使用ng-init让我的视图在加载时明确设置我想要的值。对我来说,这感觉最干净,最简单,因为我还没有控制器。
但是,ng-init不赞成,应该只用于别名。有没有更简洁的方法然后使用ng-init?拥有一个没有控制器的视图真的很糟糕(更准确地说,他们仍然拥有父控制器,但是在打开新视图时不会重新加载)。
答案 0 :(得分:3)
您没有为路线指定控制器这一事实并没有改变任何事情。视图有自己的范围,因此可以使用路径控制器或没有自己范围的指令(例如ngInit)进行操作。
关于ngInit的众所周知的评论的目标
ngInit的唯一合适用途是对特殊属性进行别名处理 ngRepeat的内容,如下面的演示所示。除了这种情况,你应该 使用控制器而不是ngInit初始化范围
上的值
是让你免于编程'。它并没有多大意义,因为关注点的分离并不是Angular的优点之一。 Angular从html属性中评估代码的习惯以及核心指令使用它的方式会促使你进一步违抗它。
答案 1 :(得分:0)
根本不要初始化那些变量。 ng-show =" smth",ng-if =" smth"如果' smth'没有定义,后来你用ng-click =" smth =!smth"来改变它。