我很困惑为什么这不起作用......
这是我的指示:
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所在的控制器范围内定义。
link函数中的console.log正在返回:
function (locals) {
return parentGet(scope, locals);
}
然而,startYear应该返回1910,因为这是在&#34; date-drop-downs&#34;的控制器中设置的值。正在调用指令。
我已尝试过console.log($scope.$eval($scope.startYear));
,但它返回上面的相同内容
我已尝试过console.log($scope.$eval(attr.startYear));
,但它返回上面的相同内容
我已经尝试了console.log(attr.startYear);
,但只返回了文字&#34; startYear&#34;
我不确定如何实际获取startYear值。
非常感谢任何帮助。
答案 0 :(得分:1)
由于您使用&
绑定,如果它们已经不起作用,它们将被包含在函数中。这通常用于使用隔离范围在父级上调用方法。
所以你应该这样做: -
$scope.startYear()
获取startYear的值,如果你正在寻找2路绑定,你应该只使用=
,如果你只需要它作为文本绑定,那么使用@
并将值设置为{{ 1}}在指令
&安培;或&amp; attr - 提供在父作用域的上下文中执行表达式的方法。如果未指定attr名称,则假定属性名称与本地名称相同。范围的给定和窗口小部件定义:{localFn:'&amp; myAttr'},然后隔离范围属性localFn将指向count = count + value表达式的函数包装器。通常需要通过表达式将数据从隔离范围传递到父范围,这可以通过将局部变量名称和值的映射传递到表达式包装器fn来完成。例如,如果表达式是increment(amount),那么我们可以通过将localFn称为localFn({amount:22})来指定金额值。
为了实现一次性绑定,您可以使用bindonce
或角度为1.3beta,您可以使用one-time binding syntax: -
start-year="{{startYear}}"
和
.. start-year="{{::startYear}}" ...
<强> Plnkr 强>