在没有控制器的情况下,ng-init 真的是一种糟糕的设置变量的方法吗

Is ng-init truely a bad way set variable in view without controller

我正在使用 ui-select 创建一个包含多个视图的复杂页面。对于那些不知道每个视图都是通过 ajax 加载的,当用户 select 一个选项卡(或者在我的例子中是一个下拉菜单)时。视图传统上有自己的控制器和 html 模板。视图继承它们所在的父页面的范围,但有自己的子范围。

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

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

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

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

然而,ng-init 是不受欢迎的,据说应该只用于别名。有没有比使用 ng-init 更简洁的方法?没有控制器的视图真的很糟糕吗(更准确地说,他们仍然有父控制器,但在打开新视图时不会重新加载)。

根本就不要初始化那个变量。 ng-show="smth", ng-if="smth" 如果未定义 'smth' 则工作正常,稍后您使用 ng-click="smth = !smth".[=10= 更改它]

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

关于ngInit的名言objective

The only appropriate use of ngInit is for aliasing special properties of ngRepeat, as seen in the demo below. Besides this case, you should use controllers rather than ngInit to initialize values on a scope

是为了让你远离'html programming'。而且它没有太多意义,因为关注点分离不属于 Angular 的优点。 Angular 从 html 属性评估代码的习惯以及核心指令如何使用它的方式促使您进一步违抗它。