自定义指令中作用域对象内的嵌套对象
Nested object inside scope object in custom directive
为什么我不能在我的范围对象的嵌套对象中有一个绑定,如下所示:
app.directive('myDirective', function() {
return {
scope: {
dropdown: {
option: '=selectedOption' //not working
}
}
}
})
我收到一个错误:
a.匹配不是一个函数
这是一个工作笨蛋。
"为什么"的答案是"因为这不是它的工作原理"。
解析指令范围的 AngularJS 源代码在这里: https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L829
function parseIsolateBindings(scope, directiveName, isController) {
var LOCAL_REGEXP = /^'s*([@&]|=('*?))('??)'s*('w*)'s*$/;
var bindings = {};
forEach(scope, function(definition, scopeName) {
var match = definition.match(LOCAL_REGEXP);
if (!match) {
throw $compileMinErr('iscp',
"Invalid {3} for directive '{0}'." +
" Definition: {... {1}: '{2}' ...}",
directiveName, scopeName, definition,
(isController ? "controller bindings definition" :
"isolate scope definition"));
}
bindings[scopeName] = {
mode: match[1][0],
collection: match[2] === '*',
optional: match[3] === '?',
attrName: match[4] || scopeName
};
});
return bindings;
}
如您所见,它对scope
对象属性进行单次传递,并且不会递归下降到对象属性。
不确定这是否有效:
scope: {
"dropdown.option": "=selectedOption"
}
但是,作为一种解决方法,您可以这样写:
app.directive('myDirective', function() {
return {
scope: {
dropdownOption: "=selectedOption"
},
controller: ["$scope", function($scope) {
$scope.dropdown = $scope.dropdown || {};
$scope.$watch('dropdownOption', function(newValue) {
$scope.dropdown.option = newValue;
});
$scope.$watch('dropdown.option', function(newValue) {
$scope.dropdownOption = newValue;
});
}]
}
})
相关文章:
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 如何打印嵌套对象的所有值
- 设置嵌套对象属性的更好方法
- 访问嵌套JSON对象的键,其中键是动态的
- 嵌套对象结构
- 如何递归地获取嵌套对象中所有子对象的列表
- 更改嵌套对象的父子相关id
- Node.js:用作对象嵌套元素名称的变量
- Sailsjs创建对象-嵌套创建
- Jquery $.ajax 获取响应与将“this”对象嵌套传递到“success”回调函数冲突
- 从嵌套属性数组中获取对象嵌套值
- 将对象嵌套在另一个数组中
- javascript对象嵌套回调
- 当被引用对象嵌套在ExtJS 5.0.0中时,如何读取它
- 如何在不知道其位置的情况下删除Mongo对象(嵌套的2个数组)
- 排序嵌套在对象中的数组,该对象嵌套在另一个对象中
- Javascript对象嵌套
- 在Angular中创建多维/嵌套对象(嵌套forEach循环)
- 仅列出jquery中包含json对象嵌套的所有键
- 如何将一个javascript对象嵌套在另一个对象中