我很困惑为什么这不起作用...

这是我的指令:

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>


startYearendYeartestDate均在存在上述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

10-05 20:52