当前位置: 首页 > 知识库问答 >
问题:

AngularJS,绑定开关的范围?

谭宜
2023-03-14

为了更好地掌握AngularJS,我决定使用其中的一个示例,特别是简单地在Todo-example中添加一个“完整”的屏幕,当用户输入了5个todo,它使用一个switch-case切换到另一个div。代码可以在http://jsfiddle.net/fwchu/1/,如果有用的话。

但是,似乎每个switch-case都有自己的作用域($scope.todotext不可用),但是在本例中,可以从addTodo()中使用“this”访问它。到目前为止还不错,但是假设我想访问开关外壳之外的todoText(它在开关外壳内),我该怎么做呢?我是否可以将switch-case范围绑定到模型,它是否可以以其他方式访问,或者应该以其他方式解决这个问题?

我不是想找到上面代码的任何解决方案,我很确定我知道如何解决它而不使用开关-案例,我想了解作用域在这种情况下是如何工作的!

共有1个答案

冯翔
2023-03-14

马克有一些很棒的建议!确保您还查看了AngularJS Batarang Chrome扩展,以查看各种作用域及其值(以及其他内容)。注意,它似乎不能很好地与jsfiddle一起工作。

我不知道如何直接访问内部作用域,但这里有一种方法可以通过绑定到对象而不是基元来访问外部作用域中的相同文本。

1)在控制器中声明TodoText为对象而不是基元:

$scope.todoText = {text: ''};
<form ng-submit="addTodo()">
    <input type="text" ng-model="todoText.text" size="30" placeholder="add new todo here">
    <input class="btn-primary" type="submit" value="add">
</form>
$scope.addTodo = function() {
    $scope.todos.push({text:$scope.todoText.text, done:false, width: Math.floor(Math.random() * 100) + 50});
    $scope.todoText.text = '';
};

请看一下这个小提琴,并注意,当您键入某些内容时,文本框下面显示的文本正在访问外部作用域上的todoText.text

如果将代码改回使用原语(如本小提琴中所示),父作用域TodoText将不会反映对TextBox所做的任何更改。这可能更多地与JavaScript如何复制引用值有关(更多信息请参见本文),而与AngularJS无关。

 类似资料:
  • 问题内容: 为了掌握AngularJS,我决定使用其中一个示例,特别是在Todo示例中简单地添加一个“ complete”屏幕,当用户输入5个todo时,它会使用一个切换案例切换到另一个div。 。如果有任何用处,可以在这里找到代码http://jsfiddle.net/FWCHU/1/。 但是,似乎每个开关盒都有其自己的作用域($ scope.todoText不可用),但是在这种情况下,可以使用

  • 问题内容: 我正在尝试使用ng- model将复选框绑定到作用域。复选框的初始状态恰好与范围模型相对应,但是当我选中/取消选中复选框时,模型不会更改。需要注意的是,模板是在运行时使用ng- include动态加载的 当我选中该框时,控制台记录为false,而当我取消选中该框时,控制台再次记录为false。我还在作用域上有一个订单模型,如果我将复选框的模型更改为order.billing_is_sh

  • 问题内容: 我刚刚从KnockoutJS切换到AngularJS,但在AngularJS中找不到KnockoutJS的“ with”数据绑定。 这是KnockoutJS中的代码片段。“ with”绑定创建一个新的绑定上下文,以便将后代元素绑定到指定对象的上下文中。 AngularJS是否有类似上下文的内容? 问题答案: 我所不知道的..这是我能做的最好的事情:

  • AngularJS中的数据绑定就是模型与视图间的自动同步。这种实现方式让你能专心地处理你的模型。视图总是模型的投影。当模型改变,视图就会反映这种改变,反之亦然。 传统的模板系统数据绑定 大部分模板系统都是这种绑定方式。 方向:如图所示,它们将模型和模板结合生成视图。这个结合过程产生的视图不是动态更新的。更糟的是,任何用户和视图的交互都不会反映到模型。这意味着开发者要自动写视图和模型双向的同步代码。

  • 问题内容: 我需要将动态参数传递给applet。 这是我的控制器: 这是我的观点,参数base64在控制器中定义为“ abcd” 当我运行页面时,我在p标签中看到字符串’abcd’,但是applet参数的值只是“ {{base64}}”。 我该如何解决? 问题答案: 我解决了传递整个applet声明的问题。这样,它可以正常工作。 控制器: 视图:

  • 问题内容: 我目前正在将一个大型应用程序移植到基于HTML5的Web应用程序上-我已经开始在AngularJS中构建该应用程序并享受AngularJS框架的功能- 目前,我遇到了一个问题: 我有一个给我jQuery Datepicker的指令,但是对模型的绑定似乎不起作用。 http://jsfiddle.net/9BRNf/ 我可能会误解指令的工作方式,并想了解我是否可以修补对框架的这一部分理解