为什么不能从ui-bootstrap模态控制器中绑定$scope字符串值?
Why won't binding to a $scope string value from a ui-bootstrap modal controller work?
我使用ui-bootstrap来处理我的情态。我传入$scope作为作用域参数,它看起来像这样:
var modalInstance = $modal.open({
templateUrl: 'views/pages/gethelp/modals/bulk_change.html',
controller: BulkChangeCtrl,
size: 'lg',
scope: $scope,
backdrop:"static",
resolve: {
type: function() { return type; },
field:function() { return field; },
preset: function() { return preset; }
}
});
在我的模态控制器中,我定义了一个单一的模型字符串值,我既想绑定到输入,也想在用户点击提交时作为选择值使用。这很简单,设置如下:
$scope.val = "";
然而,在我的提交函数中,它是通过点击按钮调用的,无论如何,$scope。Val为空。这就像函数引用了一个完全不同版本的$scope.val。然而,在我看来,我可以绑定到{{val}},没有问题。
为什么会这样?当我将代码更新为:
$scope.obj = { val:"" };
一切都像预期的那样工作,我可以绑定到{{obj.val}}。我在这里完全遗漏了什么?
这是因为bootstrap创建了一个子作用域(@ var modalScope = (modalOptions.scope || $rootScope).$new();
),提供了作用域参数。所以在angular子作用域中,原型继承自父级。原始类型(当绑定中没有.
时)不会在原型链中进行咨询,并且会添加一个新的属性val
并更新它,这不会反映在底层作用域中,只有更新引用类型(对象,函数引用等)才会反映更改,因此obj.val
工作,因为父作用域也引用了相同的obj
。
所以当你这样做的时候:-
$scope.val = "";
在提供的作用域之外创建的新子作用域将在子作用域更新val
,因为它不是作为引用类型的值更新的,所以你不会看到它在父作用域更新。
这里有一个很好的阅读
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- jQuery中是否内置了任何字符串格式化函数
- AngularJS:ng之后,重复$scope值未按预期更新
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- ng打开空字符串
- 正则表达式在字符串中找到base64
- 如何将字符串值从php页面发送到java脚本页面
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 字符串在将其传递给另一个活动Android JavaScript时读取Null
- 对id以某个字符串开头的元素进行计数
- Javascript逻辑运算符和字符串/数字
- 反向字符串比较
- $scope变量被视为字符串AngularJs
- Json和$scope的角度之间的差异$eval应用于JSON字符串时
- angular js$scope变量与字符串绑定
- AngularJS将字符串转换为引用$scope中的对象的对象/数组
- 为什么不能从ui-bootstrap模态控制器中绑定$scope字符串值?
- 如何让Angular使用scope作为数据模型来显示变量的字符串呢?
- AngularJs如何传递Json字符串到$scope.msg=msg.data
- 遍历由字符串定义的$scope