首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >angularjs数据转换

angularjs数据转换
EN

Stack Overflow用户
提问于 2014-12-04 15:09:07
回答 1查看 1.1K关注 0票数 0

我有一个输入字段,其中显示了一些信息:

代码语言:javascript
复制
<input type="text" id="1" data-transformer="" data-ng-model="number"/>

我需要的是根据某个变量更改显示的信息,例如:

"number“模型等于值10。我还有一个动态变量"x”,它的范围是0-24。条件是:如果"x > 23“,那么我需要显示"--”,而不是原来的"number“模型值10。

我认为使用其他指令“data-transformer=”可以做到这一点。

代码语言:javascript
复制
mbg.directive('transformer', function () {
    return {
        require: 'ngModel',
        link: function (s, e, a, m) {
            m.$formatters.unshift(function (model) {
                s.tmp = model;
                return (s.x > 23 ? '--' : model);
            });

            m.$parsers.push(function () {
                return s.tmp;
            });
        }
    };
});

然而,这并不像我希望的那样工作:它只在第一次工作,页面被加载并设置了"x“,但如果"x”值改变,什么也不会发生。我有点理解为什么会这样(这是因为transformer指令只在"number“模型改变时才起作用,而不是"x")。

我想知道的是,我如何才能达到我想要的结果?

EN

回答 1

Stack Overflow用户

发布于 2014-12-04 16:11:55

如果可以在非输入元素中表示数字,或者可以使用监视并将输入ng-model绑定到转换后的表示形式,则可以使用过滤器来解决此问题:)

http://jsfiddle.net/HB7LU/8784/

HTML

代码语言:javascript
复制
Input: <input data-ng-model="number" />
<hr>
<h2>Filter</h2>
<span ng-bind="number | transformer"></span>
<hr>
<h2>Watch</h2>
<div ng-controller="transformerController">
    <input ng-model="transformedNumber" readonly />
</div>

JS

代码语言:javascript
复制
var myApp = angular.module('myApp',[]);

myApp.filter('transformer', function () {
    return function (input, target) {
         return (input > 23 ? '--' : input);
    }
});


myApp.controller('transformerController', ['$scope', function ($scope) {
    $scope.$watch('number', function(value) {
        $scope.transformedNumber = (value > 23 ? '--' : value);
    });
}]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27288183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档