在没有控制器的情况下,在视图中设置变量确实是一种糟糕的方式吗



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

就我而言,我们的一些观点根本没有控制者。它们非常简单,我们只有html页面。问题是,我希望他们能够在父页的作用域上的配置对象上切换布尔值,关闭父页上的一些控制字段。一切都已经存在,多个页面使用这些视图,我只想展开它们来切换父级上的内容。

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

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

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

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

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

ngInit 著名评论的目的

ngInit的唯一适当用途是用于别名特殊属性如下面的演示所示。除了这个案子,你应该使用控制器而不是ngInit初始化作用域上的值

是为了防止"html编程"。它没有太多意义,因为分离关注点不在Angular的优点之列。Angular从html属性评估代码的习惯,以及核心指令使用代码的方式,都会促使您进一步抵制它。

只是根本不初始化那个变量。ng show="smth",ng if="smth'如果未定义,则正常工作,稍后使用ng click="smt=!smth"进行更改。

最新更新