如何在隔离范围中创建嵌套对象

时间:2014-10-14 12:49:24

标签: javascript angularjs angularjs-directive

所以我想在我的嵌套范围内创建一个嵌套的struture,如下所示:

angular.module('myAddress').directive('myAddress', [function () {
    return {
        restrict: 'AE',
        controller: 'myAddressController',
        templateUrl: 'my-address.html',
        scope: {
            address: {
                'form': '=addressForm',
                'model': '=addressModel'
            }
        }
    };
}]);

但是我得到一个异常,即如果删除地址嵌套,undefined不是我没有得到的函数。

如何将属性参数放在我的范围内的命名键中?

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

1 个答案:

答案 0 :(得分:2)

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

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

例如:

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。然后指令中的scope属性应该如下所示

scope: { 
       address: '='
}

<强>更新

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