当前位置: 首页 > 面试题库 >

我的ng模型真的需要一个点来避免子$ scope问题吗?

权韬
2023-03-14
问题内容

根据https://github.com/angular/angular.js/wiki/Understanding-
Scopes的
说法,尝试将数据绑定到附加到您的基本体上是一个问题$scope

范围继承通常是简单明了的,并且您通常甚至不需要知道它的发生……直到您尝试将2-way数据绑定(例如,表单元素,ng-
model)绑定到基元(例如,数字,字符串,布尔值)从子作用域内部在父作用域上定义。它不能像大多数人期望的那样工作。

建议是

通过遵循始终具有“’”的“最佳实践”,可以很容易地避免使用基元出现此问题。在您的ng模型中

现在,我有一个非常简单的设置,它违反了以下规则:

HTML:

<input type="text" ng-model="theText" />
<button ng-disabled="shouldDisable()">Button</button>

JS:

function MyController($scope) {
    $scope.theText = "";
    $scope.shouldDisable = function () {
         return $scope.theText.length >= 2;
    };
}

这真的不好吗?当我开始尝试以某种方式使用子范围时,这会以某种可怕的方式将我弄糟吗?

我需要将其更改为类似

function MyController($scope) {
    $scope.theText = { value: "" };
    $scope.shouldDisable = function () {
         return $scope.theText.value.length >= 2;
    };
}

<input type="text" ng-model="theText.value" />
<button ng-disabled="shouldDisable()">Button</button>

以便我遵循最佳做法?您能给我一个具体的例子吗,后者将使我免于前者带来的可怕后果?


问题答案:

一个 很多 的东西引入新的领域。假设在您的控制器中,您实际上要添加选项卡:第一个选项卡是实际的渲染,第二个选项卡是表单(以便您具有实时预览)。

您决定为此使用指令:

<tabs>
  <tab name="view">
    <pre>{{theText|formatInSomeWay}}</pre>
  </tab>
  <tab name="edit" focus="true">
    <input type="text" ng-model="theText" />
  </tab>
</tabs>

好吧,知道什么?<tabs>有自己的范围,并打破了您的控制器之一!因此,当您进行编辑时,angular将在js中执行以下操作:

$scope.theText = element.val();

它将不会遍历原型链尝试并设置theText在父级上。

编辑:为了清楚起见,我仅以“标签”为例。当我说“ 很多 东西引入了新的作用域”时,我的意思是:ng-include,ng-view,ng-
switch,ng-controller(当然)等。

所以说:这可能并不需要 现在为
,因为你还没有孩子在该视图范围,但你不知道你是否要去添加子模板或没有,这最终可能会改变theText自己,从而导致问题。为了将来验证您的设计,请始终遵守该规则,然后您就不会感到惊讶了;)。



 类似资料:
  • 我有一个Flink应用程序,它从Kafka中读取一些事件,从MySQL中丰富数据,使用窗口函数缓冲数据,并将窗口内的数据写入HBase。我目前已经启用了检查点,但事实证明,检查点非常昂贵,随着时间的推移,它花费的时间越来越长,并影响我的作业延迟(Kafka摄取率落后)。如果我想办法使HBase写操作幂等,是否有充分的理由使用检查点?我可以将内部kafka消费客户端配置为每隔一段时间提交一次,对吗?

  • 问题内容: 我正在尝试使用一些UI按钮将位置移动0.1或-0.1来影响3D模型的转换。 我的模型位置是一个三维浮点数,因此简单地向其中一个值添加0.1f会导致明显的舍入误差。虽然我可以使用BigDecimal之类的东西来保持精度,但我仍然必须将其从浮点数转换为最后的浮点数,并且它始终会产生愚蠢的数字,这使我的UI看起来一团糟。 我可以将显示的值设为漂亮,但是舍入错误只会随着更多的编辑而变得更糟,它

  • 问题内容: 我真的需要做mysql_close()吗?为什么或者为什么不? 即使我不执行mysql_close,也有触发器会在mysql_connect之后关闭链接吗? 问题答案: 在大多数情况下,调用不会对性能产生任何影响。但是,关闭程序不再使用的资源(文件句柄,打开的套接字,数据库连接等)始终是一个好习惯。 如果您正在做可能要花费几秒钟的操作,例如从REST API读取和解析数据,则尤其如此。

  • 有许多实际问题被证明是NP难的。如果我们假设P≠NP,这些问题没有任何多项式时间算法。 如果你必须解决这些问题中的一个,你有希望高效地解决吗?还是你只是运气不好?

  • 假设我有一个节点表示位置的图。从某些节点N开始,我想经由可能的最短路径到达另一个节点M。问题是我想避免一些节点,与它们保持一定的距离(比如至少有D个节点)。 是否有一种图算法可以解决具有节点回避要求的最短路径问题?加权图(从待避免节点发出无限长边)是这里的解决方案吗?