Javascript 在没有控制器的情况下,ng init真的是视图中设置变量的坏方法吗

Javascript 在没有控制器的情况下,ng init真的是视图中设置变量的坏方法吗,javascript,angularjs,ui-select,Javascript,Angularjs,Ui Select,我正在使用ui select创建一个包含多个视图的复杂页面。对于那些不知道当用户选择一个选项卡(或者在我的例子中是下拉列表)时,每个视图都是通过ajax加载的人。视图通常有自己的控制器和html模板。视图位于其所在父页面的范围内,但具有自己的子范围 在我的例子中,我们的一些视图根本没有控制器。它们非常简单,我们只有html页面。问题是,我希望他们能够在父页面范围内的配置对象上切换布尔值,在父页面上的某些控制字段上关闭布尔值。一切都已经存在,多个页面使用这些视图,我只想扩展它们以在父视图上切换某些

我正在使用ui select创建一个包含多个视图的复杂页面。对于那些不知道当用户选择一个选项卡(或者在我的例子中是下拉列表)时,每个视图都是通过ajax加载的人。视图通常有自己的控制器和html模板。视图位于其所在父页面的范围内,但具有自己的子范围

在我的例子中,我们的一些视图根本没有控制器。它们非常简单,我们只有html页面。问题是,我希望他们能够在父页面范围内的配置对象上切换布尔值,在父页面上的某些控制字段上关闭布尔值。一切都已经存在,多个页面使用这些视图,我只想扩展它们以在父视图上切换某些内容

我可以用三种方法来做这件事。我可以在我的ui路由器中使用resolve方法在加载视图时显式切换我想要的字段,但是我必须在每个ui路由器中为每个页面显式切换;没有很酷的代码重用

我可以让我的ui路由器加载一个控制器,而目前我没有控制器,控制器可以这样做。然而,这意味着手动添加一个控制器,这在我使用视图的任何地方都是不需要的,而且也不像代码重用那样

或者我可以使用nginit让我的视图在加载时显式地设置我想要的值。对我来说,这感觉最干净、最简单,因为我还没有控制器


然而,ng init是不受欢迎的,并且应该只用于假定的别名。那么使用ng init是否有更干净的方法?没有控制器的视图真的很糟糕吗(更确切地说,它们仍然有父控制器,但在打开新视图时不会重新加载父控制器)。

只需根本不初始化该变量。如果没有定义“smth”,则ng show=“smth”,ng if=“smth”可以正常工作,稍后您可以使用ng click=“smth=!smth”对其进行更改。

您没有为路由指定控制器这一事实不会改变任何东西。视图有自己的作用域,因此可以使用路由控制器或没有自己作用域的指令(例如ngInit)对其进行操作

关于ngInit的著名评论的目的

ngInit的唯一适当用途是为特殊属性设置别名 如下面的演示所示。除此之外,你应该 使用控制器而不是ngInit初始化作用域上的值


就是让你远离“html编程”。它没有太多意义,因为关注点的分离不属于Angular的优点。Angular根据html属性计算代码的习惯以及核心指令使用代码的方式促使您进一步反对它。

但我有一个视图可以打开或关闭。因此,无论单击在何处,视图更改时它都必须更改。我可以把它放在改变视图的下拉列表中,但是下拉列表不知道哪个视图是哪个视图,所以我最终会硬编码视图的逻辑,而不是动态添加视图