我正在尝试用Angular Bootstrap's Modal写一些东西。这会在html主体的末尾注入一个div,它不包含在控制器中。结果是我无法通过$ scope访问绑定,但出于某种原因,我可以将它们写入模型中的视图。
The code can be found here.
在第23行,您会发现$ scope已成功写入,并且数据绑定到输入。但是,如果您在3秒后编辑输入,则会警告绑定到它的$ scope,但不会反映视图中的更改。我发现这可以通过将模态包装在自己的控制器中来解决,但后来我无法得到我想要做的工作。
是否可以从控制器访问模型中的更改?
答案 0 :(得分:1)
根据范围最佳实践的角度wiki page。
范围继承通常很简单,你甚至不需要知道它正在发生......直到你尝试双向数据绑定(即表单元素,ng-model)到一个原语(例如,数字) ,string,boolean)在子范围内从父范围定义。它不像大多数人期望的那样工作。会发生什么是子范围获取其自己的属性,该属性隐藏/隐藏同名的父属性。这不是AngularJS正在做的事情 - 这就是JavaScript原型继承的工作原理。新的AngularJS开发人员通常没有意识到ng-repeat,ng-switch,ng-view和ng-include都会创建新的子范围,因此在涉及这些指令时经常会出现问题。 (有关问题的快速说明,请参阅此示例。)
通过遵循始终拥有'。'的“最佳实践”,可以轻松避免使用原语这个问题。在您的ng模型中 - 观看3分钟。 Misko用ng-switch演示了原始绑定问题。
答案 1 :(得分:0)
我找到了答案,但不明白这个问题,如果有人能够解释,我将不胜感激。
代码需要更改为:
$scope.data = {};
$scope.data.yn = 'this';
alert( $scope.data.yn );
setTimeout( function(){alert( $scope.data.yn )}, 3000 );
和输入:
<input type="text" name="yourName" value="David" data-ng-model="data.yn" />
自:
$scope = {};
$scope.yn = 'this';
alert( $scope.yn );
setTimeout( function(){alert( $scope.yn )}, 3000 );
输入:
<input type="text" name="yourName" value="David" data-ng-model="yn" />