【问题标题】:AngularJs Call function on hidden input on value change $watchAngularJs在值更改$watch时对隐藏输入调用函数
【发布时间】:2016-11-05 04:52:04
【问题描述】:

我想使用 $watch 以便在每次更改这 3 个值之一时触发一个函数:

html:

<input type="hidden" name="source_x" id="source_x" ng-model="source_x"/>
<input type="hidden" name="source_y" id="source_y" ng-model="source_y"/>
<input type="hidden" name="id" id="id" ng-model="id"/>

我刚开始使用 Angular,我想使用 $watch 来触发一个函数。 每次我使用下面的可拖动功能拖动一个 div 时,这些值都会更改:

$("#div").draggable({
         helper : 'clone',
    stop:function(event,ui) {
        var wrapper = $("#container-emote").offset();
        var borderLeft = parseInt($("#container-emote").css("border-left-width"),10);
        var borderTop = parseInt($("#container-emote").css("border-top-width"),10);
        var pos = ui.helper.offset();
        $("#source_x").val(pos.left - wrapper.left - borderLeft);
        $("#source_y").val(-(pos.top - wrapper.top - borderTop)+185);
        $("#id").val(2);
    }
    });

我从这个开始,但我认为这是不对的,因为如果我移动一个 div 我将调用该函数的 3 次?此外,我不知道我是否可以在隐藏输入的情况下使用它。谢谢!

    //Fonction
$scope.$watch($scope.source_x, createEmote);
$scope.$watch($scope.source_y, createEmote);
$scope.$watch($scope.id, createEmote);

function createEmote(newValue, oldValue, scope){

                    }

更新:回答小提琴 我只是在拖动结束时添加一个函数

jsfiddle.net/5e7zbn5z/1/

【问题讨论】:

    标签: javascript angularjs angularjs-scope watch angularjs-watch


    【解决方案1】:

    你需要像这样使用你的$scope.$watch

    $scope.$watch(function() {
        return $scope.source_x + $scope.source_y + $scope.id;
    }, function() {
        $scope.createEmote();
    });
    

    让你的createEmote 成为你$scope 的一个函数:

    $scope.createEmote = function() {
        // do something with $scope.source_x, etc
    }
    

    编辑

    正如@Sergey 在 cmets 中所述,确切的观察者功能将取决于您的预期数据。如果需要,您也可以复制它并更改返回的变量(类似于您现有的代码)。

    【讨论】:

    • 想象source_x 在 1 中增加,source_y 在 1 中减少。总和将相同。
    • @SergeyGoliney 正确,显然这取决于确切的用例。对于典型的 user 输入,它会很好,因为用户将无法同时修改两个字段。不知道具体要输入什么,我只是和一个可能的观察者一起去了。
    • 如果只需要查看输入值,我会先使用ng-change
    • 我会改变很多事情。但鉴于 OP 没有提供大量细节,我认为最好回答如何使用 $scope.$watch 而不是提供替代方案。不过还是有好处的。
    • 好的,谢谢!那么这是否应该在我每次移动 div 时提醒我? $scope.$watch(function() { return $scope.source_x + $scope.source_y + $scope.id; }, function() { $scope.createEmote(); }); $scope.createEmote = function() { alert("ok"); }
    猜你喜欢
    • 2019-04-10
    • 2018-03-09
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多