首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板指令中的AngularJs调用方法

模板指令中的AngularJs调用方法
EN

Stack Overflow用户
提问于 2020-07-23 07:29:12
回答 1查看 28关注 0票数 0

我有以下指令,根据参数decimals,将像3这样的数字值呈现为3.xxx

代码语言:javascript
复制
 app.directive("myValue", () => {
        return {
            template: '{{value.toFixed(decimals)}}',
            scope: {
                'value': '=myValue',
                'decimals': '=myValueDecimals'
            },
            link: function () {
            }
        }
    });

现在我想包括对特殊值的处理,比如undefinedNAN等等。我已经有了一个函数来代替value.toFixed(小数),但是我不知道如何在指令中直接调用一个函数。

更新:视图值正在动态更改,因此在值更改时应刷新视图值

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 07:39:20

您需要在指令的作用域中创建viewValue,并将已处理的值分配给它。对于打字本,您可能需要这样做:

代码语言:javascript
复制
interface IValueScope extends IScope {
    viewValue:number;
}

 app.directive("myValue", () => {
        return {
            template: '{{viewValue}}',
            scope: {
                'value': '=myValue',
                'decimals': '=myValueDecimals',
   
            },
            link: function ($scope:IValueScope) {
            $scope.viewValue = $scope.value == null || Number.isNaN($scope.value)
                ? 0 
                : $scope.value.toFixed($scope.decimals);
            }
        }
    });

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

app.component('home', {
  template: '<span><button ng-click="$ctrl.inc()">Inc</button> <data-val data-my-value="$ctrl.v" data-my-value-decimals="2" ></my-value> </span>',
  controller: function() {
    this.v = 1;
    this.inc = () => this.v += 1;
  }

});

app.directive("val", () => {
  return {
    template: '{{viewValue}}',
    scope: {
      'value': '<myValue',
      'decimals': '<myValueDecimals',
    },
    link: function($scope) {
      const newValue = (v) => v == null || Number.isNaN(v) ?
        0 :
        v.toFixed($scope.decimals)

      $scope.viewValue = newValue($scope.value);

      const cleanup = $scope.$watch('value', (value) => {
        $scope.viewValue = newValue(value)
      });
      $scope.$on('$destroy', () => cleanup());
    }
  }
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="app">
  <home></home>
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63049032

复制
相关文章

相似问题

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