更新 我找到了一个解决方法。在父作用域中我创建了一个对象,然后我将对象的属性绑定到输入指令,如:
//Parent controller
$scope.data = {};
//Parent directive template
template: '<custom-input model="data[\'test\']"></custom-input>',
在这种情况下,一切正常。但是,至少为此创建一个额外的对象感觉不自然。我相信存在更优雅的解决方案。
在我的angularjs(1.2.27)应用程序中,我有一个自定义输入元素的指令,它帮助用户查找数据库中的特定行,然后将该行作为javascript对象返回。我想将所选元素暴露给外部范围,因此我使用双向绑定。但是,当用户选择某些内容时,不会通知父作用域有关更改,子指令的作用域是。您可以在下面看到示例代码:
app.controller('customInputController', ['$scope', function($scope) {
$scope.$watch('model', function(value){
console.log('Child controller model updated!');
});
//This function is called when a user has selected an object,
$scope.select = function(object) {
//I believe the error is hiding nearby
$scope.model = angular.copy(object);
}
}]);
app.directive('customInput', function() {
return {
restrict: 'E',
template: '...',
scope: {
model: '='
},
controller: 'customInputController'
}
});
app.controller('parentController', ['$scope', function($scope) {
$scope.$watch('test', function(value){
console.log('Parent controller test updated!');
});
}]);
app.directive('parent', function() {
return {
restrict: 'E',
template: '<custom-input model="test"></custom-input>',
controller: 'parentController'
}
});
但是,如果我将以下行添加到父控制器:
$scope.test = { name: "test" };
两个范围都会收到有关此更改的通知,因此我想到最初会发生绑定,但是当在子范围内重新分配模型时,父范围会丢失对该变量的引用。
这让我感到困惑,为什么在子范围内重新分配变量会破坏所有内容,这不是打算使用绑定的方式吗?显然,提供的代码不是我遇到的实际代码,不可能在这里发布,所以我有可能遗漏一些实际导致错误的内容。
提前致谢。