对自定义指令的角度属性的困惑

时间:2014-08-26 01:05:50

标签: javascript angularjs angularjs-directive

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

这是我的指示:

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所在的控制器范围内定义。

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值。

非常感谢任何帮助。

1 个答案:

答案 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