【问题标题】:AngularJS passing an attribute value as a parameter in a function called by ng-changeAngularJS 在 ng-change 调用的函数中将属性值作为参数传递
【发布时间】:2014-12-14 06:18:01
【问题描述】:

我似乎无法思考如何实现这一目标。我有一个如下所示的指令:

.directive('seqWidget', ['Sequence', function(Sequence){
    return {        
        restrict: 'E',
        scope: {
            placeholder: '@',
            option: '@'
        },
        template: '<fieldset><legend data-ng-transclude></legend><input type="text" placeholder = {{placeholder}} autofocus data-ng-model="index" data-ng-change="retrieve({{option}});"/>{{output}}</fieldset>',
        replace: true,
        transclude: true,
        link: function ($scope, $elem, $attr){

            $scope.retrieve = function(key){
                //var option = $attr.option;
                console.log(key);
            }
        }
    }
}]);

我的 HTML 是这样的:

<seq-widget placeholder="Index 0-400" option="accurate">Which index number would you like to gain accuracy on?</seq-widget>

我已经尝试了其他几种方法来实现基于属性值更改函数调用的动态方法。我会使用 '&' 前缀,但我希望在输入更改时触发此功能。有没有一种实用的方法来实现我想要做的事情?或者我需要使用 jQuery 来表达类似 $('input').on('change', function(){}); 的内容吗?在我的链接功能中?

【问题讨论】:

    标签: javascript html angularjs angularjs-directive angularjs-scope


    【解决方案1】:

    您不必传递option,它已经在范围内,而您设置了文本绑定option: '@'

    那就这样吧:-

            $scope.retrieve = function(key){
                console.log($scope.option);
            }
    

    如果您删除插值,它也可以工作,您不必在表达式中插入范围变量。

     data-ng-change="retrieve(option);"
    

    【讨论】:

    • 我仍然得到一个“未定义”的控制台日志,即使我从“retrieve()”中删除了“option”作为参数,并且刚刚做了 console.log($scope.option)在我的指令链接函数中的 $scope.retrieve 函数定义中,就像你演示的那样。
    • 你可能做错了什么,检查这个plnkr.co/edit/X1LnFy?p=preview
    • 而且,要访问选项属性的值(在这种情况下为“准确”),我相信您必须使用插值,因为准确可以作为字符串使用......就像 中的“占位符”被插入到模板的新占位符属性中。
    • @papiro 你的问题不清楚。准确是范围变量吗?然后只需在您的小部件元素中进行插值。即option="{{accurate}}"你需要记住@是文本绑定(单向)如果你需要2向绑定你需要使用=并且没有插值。在我的上一条评论中查看相同的演示链接以获取更新。
    • 很抱歉,您是对的。我觉得自己像个白痴。我实际上有两个 元素,我在第二个元素上有“选项”属性,但是由于一些多余的原因,我通过输入第一个元素来测试我的代码......
    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    相关资源
    最近更新 更多