【问题标题】:AngularJS watch can't detect input range ng-model changesAngularJS 手表无法检测到输入范围 ng-model 的变化
【发布时间】:2016-08-07 23:23:16
【问题描述】:

这样得到我的指令

<input type="range" min="10" max="100" ng-model="svgConfig.textConfig.fontSize" />

在我的控制器中,我得到了类似的对象

$scope.svgConfig = {
    text:'',
    textConfig: {
        fontSize: 20
    },
    rectConfig: []
};

试图在此处的链接中捕捉更改,但没有任何反应。

var setDomBindings = function($scope, $element, $attrs){

    $scope.$watch('svgConfig.textConfig.fontSize', function() {
        var domText = $element.find('text'),
            textExample = domText.last()[0],
            dataText = $scope.svgConfig.text;

        debugger; //haven't even been reached! 

        if($.isEmptyObject(textExample) && domText.length === 0 && dataText === 0){
            $scope.clearSvgRectConfig();
            return;
        }

        $scope.setSvgRectConfig(textExample, domText.length);
    });
};

/*
* Retruns initialized DOM element
*/
return {
    restrict: 'E',
    templateUrl: './app/shared/imageTextEditor/imageTxtSvgView.html',
    controller: 'imageTxtSvgController',
    transclude: true,
    link: setDomBindings
};

【问题讨论】:

  • 您的绑定在svgConfig.textConfig.fontSize,但您的手表在svgConfig.fontSize。这是一个错字还是将您的代码翻译成问题正文的错误?
  • @Claies 错字,抱歉
  • 好的,既然已经澄清了,你的$watch 有一个奇怪的语法,而且你似乎在使用$element 这不是一个角度感知函数。
  • @Claies 我可以通过从范围元素中捕获change 并将值设置为范围,然后再应用,但应用过多会使我的应用程序以光速在控制台中抛出错误

标签: javascript angularjs font-size


【解决方案1】:

请记住,此函数不会按标签名称/CSS 选择器查找元素。对于按标签名称查找,请尝试使用 angular.element(document).find(...) 或 $document.find(),或使用标准 DOM API,例如document.querySelectorAll() 您确实可以访问 children()、contents() 和 data() 实现,因此您通常可以找到解决方法。

【讨论】:

  • 嗯,是的,我可以让它像通过元素事件一样工作,但是,啊...不太喜欢用 DOM 做事。也许我错过了一些东西,那里还有很多其他代码,它们将更改应用于范围
  • 如果你用 angular 添加 jquery 那么你可以使用那个函数。
  • 已经拿到了。我想如果这里没有新的有趣的东西,我会把你的帖子作为答案:)
猜你喜欢
  • 2016-12-24
  • 2021-01-19
  • 1970-01-01
  • 2018-04-03
  • 1970-01-01
  • 2015-10-15
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多