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){…}。是的,我想要一个隔离的作用域,因为我认为非隔离的作用域有点坏。