我有以下父母和子女(http://jsfiddle.net/j1ee5zss/2/):
<div parent parent-model="my-model">
<div child>Child</div>
</div>
在child指令中,我试图获得父模型,例如“my-model”:
app.directive("parent", parent);
function parent() {
var parent = {
controller: ["$scope", controller],
replace: false,
restrict: "A",
scope: {
model: "="
}
};
return parent;
function controller($scope) {
this.getModel = function () {
return $scope.model;
}
}
}
app.directive("child", child);
function child() {
var child = {
link: link,
replace: false,
require: "^parent",
restrict: "A"
};
return child;
function link(scope, element, attributes, controller) {
var model = controller.getModel();
console.log(model);
}
}
为什么在编写console.log(model)时模型未定义?
答案 0 :(得分:0)
也许您应该观察parentModel,而不是模型?
scope: {
parentModel: "="
}
或者只使用属性模型。
答案 1 :(得分:0)
如果要获取字符串my-model
,则需要将其括在引号中。
<div parent parent-model="'my-model'">
<div child>Child</div>
</div>
JS
scope: {
model: "=parentModel"
}
使用双向绑定=
将属性绑定到范围时,该属性将被计算为Angular表达式,而不是文字。
答案 2 :(得分:0)
您没有正确地进行双向绑定。您正在创建隔离范围命名'model'$ scope变量,因此这是获取父属性值的方法,例如父模型。
scope: {
model: "=parentModel"
}
如果你的控制器中有我的模型值。