我很困惑为什么这不起作用...
这是我的指令:
app.directive('dateDropDowns', function () {
function link($scope, elem, attr) {
console.log($scope.startYear);
};
function controller($scope, $attrs, $location) {
};
return {
link: link,
scope: {
startYear: "&",
endYear: "&",
date: "=",
required: "&"
},
restrict: "EA",
templateUrl: "/scripts/templates/datedropdowns.html",
controller: controller
}
});
这是我的指令html:
<div date-drop-downs start-year="startYear" end-year="endYear" required="true" date="testDate"></div>
startYear
,endYear
,testDate
均在存在上述html的控制器范围内定义。链接功能中的console.log返回:
function (locals) {
return parentGet(scope, locals);
}
但是,startYear应该返回1910,因为这是在调用“ date-drop-downs”指令的控制器中设置的值。
我试过
console.log($scope.$eval($scope.startYear));
但它返回上面的相同内容我试过
console.log($scope.$eval(attr.startYear));
但它返回上面的相同内容我试过
console.log(attr.startYear);
,但是只返回文本“ startYear”我不确定该如何做才能真正获得startYear值。
任何帮助是极大的赞赏。
最佳答案
由于您正在使用&
绑定,如果它们已经不起作用,它们将被包装为函数。通常使用隔离范围在父对象上调用方法。
因此,您实际上应该这样做:
$scope.startYear()
要获取startYear的值,如果您正在寻找2种方式绑定,则应该只使用
=
,如果只需要将其用作文本绑定,则使用@
并将伪指令上的值设置为start-year="{{startYear}}"
&或&attr-提供一种在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。给定和小部件的作用域定义:{localFn:'&myAttr'},然后隔离作用域属性localFn将指向count = count + value表达式的函数包装。通常希望将数据从隔离范围通过表达式传递到父范围,这可以通过将局部变量名称和值的映射传递到表达式包装器fn中来完成。例如,如果表达式为增量(金额),则可以通过将localFn调用为localFn({amount:22})来指定金额值。
为了实现一次性绑定,您可以使用
bindonce
或与angular 1.3beta一起使用one-time binding syntax:- .. start-year="{{::startYear}}" ...
和
startYear: "@",
Plnkr