AngularJS,开关盒的绑定(bind)范围?

标签 angularjs

为了掌握 AngularJS,我决定尝试其中一个示例,具体来说,只需向 Todo 示例添加一个“完整”屏幕,当用户输入 5 个 todo 时,它使用 switch-case 切换到另一个 div .此处提供代码 http://jsfiddle.net/FWCHU/1/如果它有任何用处。

但是,似乎每个 switch-case 都有自己的范围($scope.todoText 不可用),但是在这种情况下,可以使用 addTodo() 中的“this”访问它。到目前为止一切顺利,但是说我想在 switch-case 之外访问 todoText(在 switch-case 内部),我将如何去做呢?我是否可以将 switch-case 范围绑定(bind)到模型,它是否可以通过其他方式访问,或者应该以其他方式解决?

PS。我是 不是 试图找到上述代码的任何解决方案,我很确定我知道如何在不使用 switch-cases 的情况下解决它,我想了解作用域在这种情况下是如何工作的!

最佳答案

马克有一些很棒的建议!确保您还查看了 AngularJS Batarang Chrome Extension查看各种范围及其值(除其他外)。请注意,它似乎不适用于 jsFiddle。

我不确定如何直接访问内部范围,但这是通过绑定(bind)到对象而不是原语来访问外部范围中相同文本的一种方法。

1) 声明todoText作为对象而不是 Controller 中的原语:

$scope.todoText = {text: ''};

2) 绑定(bind)todoText.text而不仅仅是 todoText :
<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>

3) 修改现有功能使用todoText.text :
$scope.addTodo = function() {
    $scope.todos.push({text:$scope.todoText.text, done:false, width: Math.floor(Math.random() * 100) + 50});
    $scope.todoText.text = '';
};

看看this fiddle请注意,当您输入内容时,文本框下方显示的文本正在访问 todoText.text在外部范围。

如果您将代码改回使用原语(如 this fiddle 中),则父范围 todoText不会反射(reflect)您对文本框所做的任何更改。这可能更多地与 JavaScript 如何复制引用值有关(参见 this post 了解更多信息),而不是 AngularJS 特定的事情。

关于AngularJS,开关盒的绑定(bind)范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12405005/

相关文章:

javascript - 基于另一个数组的选择过滤数组

javascript - 绑定(bind)范围输入以修改样式?

javascript - AngularJS/PHP - ng-repeat 从 php 获取数组没有显示任何内容

javascript - 参数未在指令函数中传递

javascript - 将多个 CSS 类应用于 Angular 选择?

angularjs - 顺序 Angular stateProvider 解析

angularjs - Angular JS 中双花括号和单花括号的区别?

html - 在 IE 中使用 Angular 操作内联样式不起作用

testing - 您如何在端到端测试中测试 AngularJS cookie?

javascript - 在每个 Controller 的开头运行一个函数