Javascript 如何在隔离作用域中创建嵌套对象

Javascript 如何在隔离作用域中创建嵌套对象,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,因此,我想在指令中的嵌套作用域上创建一个嵌套结构,如下所示: angular.module('myAddress').directive('myAddress', [function () { return { restrict: 'AE', controller: 'myAddressController', templateUrl: 'my-address.html', scope: { addr

因此,我想在指令中的嵌套作用域上创建一个嵌套结构,如下所示:

angular.module('myAddress').directive('myAddress', [function () {
    return {
        restrict: 'AE',
        controller: 'myAddressController',
        templateUrl: 'my-address.html',
        scope: {
            address: {
                'form': '=addressForm',
                'model': '=addressModel'
            }
        }
    };
}]);
但是我得到一个异常,未定义的函数不是一个如果我删除地址嵌套就不会得到的函数

如何将属性参数放入作用域上的命名键中


另外,如果我通过控制器定义$scope.address,它也不起作用。但首先执行什么?作用域:{'form'='addressForm'}部分位于我的指令或控制器的$scope.form?

使用
scope
属性定义哪些
$scope
变量应传递给指令
scope
以及数据绑定的类型

如果要在指令
$scope
中创建嵌套结构,可以在指令
控制器
函数中创建它

例如:

angular.module('myAddress').directive('myAddress', [function () {
return {
    restrict: 'AE',
    controller: 'myAddressController',
    templateUrl: 'my-address.html',
    scope: {
            addressForm: '=',  // Two-way databinding
            addressModel: '='
    },
    controller: function($scope){
         $scope.address = {
            form: $scope.addressForm,
            model: $scope.addressModel
         }
    },
    link: function($scope,$element,$attributes){
           //Your code here
    }
  };
}]);
您还可以在模块控制器
范围
中定义
$scope.address
。那么指令中的
范围
属性应该如下所示

scope: { 
       address: '='
}
更新:


另一个问题是:您的指令是否需要专用范围?如果没有,您可以设置
范围
属性
。然后您的指令可以访问模块控制器中的
$scope
变量。

似乎您没有像应该的那样将函数作为第二个参数传递给指令()。您正在传递一个数组,就像您希望向指令中注入内容,但不注入任何内容一样。如果没有别的,数组括号是不必要的。我认为这是一个好主意,但我会把它放在控制器中,这样你就有一个地方可以处理所有范围的东西。这将有额外的好处,控制器声明每个范围变量,包括指令参数。如果你同意,你能更新答案并将链接代码移动到控制器,这样我就可以接受答案吗?我的意思是让你使用链接函数并将其放入控制器<代码>控制器:函数($scope){…}。是的,我想要一个隔离的作用域,因为我认为非隔离的作用域有点坏。