【发布时间】:2015-03-13 18:13:14
【问题描述】:
我的应用中有多个“输入字段和按钮”对。 该按钮会打开一个对话框,以便在文本字段中写入内容。
[ input ] [ button ] ---> [ dialog ( ok ) ( cancel ) ]
我使用过 Bootstrap.UI.Modal (https://angular-ui.github.io/bootstrap/#/modal),所以我承诺会处理它:
//html
<input ng-model="foo"/>
<button ng-click="dialog('foo')"> Open </button>
//controller
modalInstance.result.then(
function ( selectedItem ) {
$scope[ arg ] = selectedItem;
},
...
);
一切正常。 (Demo) 当我必须访问作用域对象的嵌套属性时,问题就来了:
...
<input ng-model="foo"/>
<button ng-click="dialog('foo')"> Open </button>
...
<li ng-repeat="thing in model.nested.properties.of.unknown.level">
...
<input ng-model="thing.foo"/>
<button ng-click="dialog( '???' )"> Open </button>
...
我想知道的是:实现这一目标的最佳方法是什么?
直到现在我都尝试过:
-
将作用域变量传递给返回的回调,但它只得到值,而不是引用;所以该字段不会被更新。
resolve: { field: function() { return $scope[ field ]; } } -
传递一个字符串数组来重新创建范围层次结构
dialog( ["a","b","c"] ) --> $scope[ "a" ][ "b" ][ "c" ] = output.value; -
准备一个回调对象,例如
object = { "one": function(){ $scope.a.b.c = ... }, "two": function(){ $scope.d.e.f = ... }, ... // but this requires that I know in advance // how many level I will nest into the $scope } -
使用输入字段的id,所以你可以直接写入DOM(但据我所知这在angularjs中不是一个好方法)
$("#input-abc...").val( ... ) 使用 eval (uungh...)
我认为第一个解决方案是最好的,但是如何将嵌套范围元素的引用传递给我的 promise 回调? 有一些最佳实践可以实现这一目标吗? 有什么建议吗?
【问题讨论】:
标签: javascript angularjs angularjs-scope angular-ui-bootstrap