AngularJS指令的独立范围失去了对父级的引用

时间:2015-01-23 08:29:41

标签: javascript angularjs angularjs-directive

更新 我找到了一个解决方法。在父作用域中我创建了一个对象,然后我将对象的属性绑定到输入指令,如:

//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" };

两个范围都会收到有关此更改的通知,因此我想到最初会发生绑定,但是当在子范围内重新分配模型时,父范围会丢失对该变量的引用。

这让我感到困惑,为什么在子范围内重新分配变量会破坏所有内容,这不是打算使用绑定的方式吗?显然,提供的代码不是我遇到的实际代码,不可能在这里发布,所以我有可能遗漏一些实际导致错误的内容。

提前致谢。

0 个答案:

没有答案