我可能在概念上遗漏了一些东西,但我知道ng-repeat会创建子范围,但对于我的场景,这是不可取的。这是场景。我有一个绑定到firebase数据集的3way绑定。该对象是具有n个子对象的对象。在我当前的代码结构中,我使用ng-repeat来迭代并使用自定义指令渲染这些对象。问题是这些对象意味着“活着”(意味着它们是3向绑定的。最高级别的对象与angularfire $ bind绑定)。
因此,在我的情况下,简单的场景是ng-repeat创建的范围与创建它的范围没有隔离。
我正在寻找有关如何做到这一点的想法?或者关于其他方法的建议。
答案 0 :(得分:1)
这不是一个完整的答案,但我可以帮助使用angularFire部分,而且角色大师可能会为你填补空白(参见// todo)。
首先,不要试图分享范围。将所需的变量简单传递到子范围。由于您需要3向绑定,因此可以使用&
在父作用域上调用方法。
例如,要设置此模式:
<div ng-repeat="(key,widget) in widgets">
<data-widget bound-widget="getBoundWidget(key)"/>
</div>
您可以像这样设置指令:
.directive('dataWidget', function() {
return {
scope: {
boundWidget: '&boundWidget'
},
/* your directive here */
//todo presumably you want to use controller: ... here
}
});
where&amp; boundWidget调用父$ scope中的方法,如下所示:
.controller('ParentController', function($scope, $firebase) {
$scope.widgets = $firebase(/*...*/);
$scope.getBoundWidget = function(key) {
var ref = $scope.widgets.$child( key );
// todo, reference $scope.boundWidget in the directive??
ref.$bind(/*** ??? ***/);
};
});
现在你只需要有人填写// todo部分!
答案 1 :(得分:0)
您仍然可以访问重复中的父作用域。你只需要使用$ parent。
<强>控制器强>
app.controller('MainCtrl', ['$scope', function ($scope) {
$scope.someParentScopeVariable = 'Blah'
$scope.data = [];
$scope.data.push({name:"fred"});
$scope.data.push({name:"frank"});
$scope.data.push({name:"flo"});
$scope.data.push({name:"francis"});
}]);
<强> HTML 强>
<body ng-controller="MainCtrl">
<table>
<tr ng-repeat="item in data | filter: search">
<td>
<input type="text" ng-model="$parent.someParentScopeVariable"/>
<input type="text" ng-model="item.name">
</td>
</tr>
</table>
</body>