각도의 산술 함수JS 바인딩
Angular에서 산술 함수를 사용하는 방법이 있습니까?JS 바인딩?
예.
<p>The percentage is {{Math.round(100*count/total)}}%</p>
이 바이올린은 문제를 보여준다.
http://jsfiddle.net/ricick/jtA99/1/
를 놓아야 요.Math
에 넣을 수 있습니다.$scope
수학에 대해 아무것도 모른다.
가장 간단한 방법은
$scope.Math = window.Math;
컨트롤러에 접속합니다.이것을 올바르게 하기 위한 각진 방법은 수학 서비스를 만드는 것이라고 생각합니다.
, 은 할 수 요.Math
각도로 사용하는 경우는, 이 특정의 문제에 대해서, 보다 통념적이고 정확한 방법이, 번호 필터입니다.
<p>The percentage is {{(100*count/total)| number:0}}%</p>
것은, 을 해 주세요.number
필터는 이쪽:http://docs.angularjs.org/api/ng/filter/number
가장 좋은 방법은 다음과 같은 필터를 만드는 것이라고 생각합니다.
myModule.filter('ceil', function() {
return function(input) {
return Math.ceil(input);
};
});
마크업은 다음과 같습니다.
<p>The percentage is {{ (100*count/total) | ceil }}%</p>
갱신필 : http://jsfiddle.net/BB4T4/
대답하기 어려운 질문입니다.왜냐하면 당신은 당신이 하고 있는 일의 전체 맥락을 설명하지 않았기 때문입니다.승인된 답변은 작동하지만 경우에 따라 성능이 저하될 수 있습니다.그건 그렇고, 테스트하기가 더 어려울 거야
정적인 형태로 이 작업을 수행할 경우 좋습니다.테스트하는 것이 쉽지 않고, 힌키하더라도, 받아들여진 답은 효과가 있을 것입니다.
이것에 대해 「각적」이 되고 싶은 경우:
「비즈니스 로직」(표시하는 데이터를 변경하는 로직)은, 일절 뷰에 넣지 말아 주세요.이는 로직을 유닛으로 테스트할 수 있기 때문에 컨트롤러와 뷰가 밀접하게 결합되지 않습니다.이론적으로는 컨트롤러를 다른 뷰로 포인트하여 스코프의 동일한 값을 사용할 수 있어야 합니다.(그게 말이 된다면)
( 「」등)가 호출되는 할 필요가 .{{}}
★★★★★★★★★★★★★★★★★」ng-bind
★★★★★★★★★★★★★★★★★」ng-bind-html
angular는 스코프의 속성을 사용하여 값이 변경되었는지 여부를 알 수 없기 때문에 모든 다이제스트에 대해 평가해야 합니다.
이를 위한 "각선" 방법은 ng-change 이벤트 또는 $watch를 사용하여 변경 시 스코프의 속성에 값을 캐시하는 것입니다.
예를 들어 static 형식의 경우:
angular.controller('MainCtrl', function($scope, $window) {
$scope.count = 0;
$scope.total = 1;
$scope.updatePercentage = function () {
$scope.percentage = $window.Math.round((100 * $scope.count) / $scope.total);
};
});
<form name="calcForm">
<label>Count <input name="count" ng-model="count"
ng-change="updatePercentage()"
type="number" min="0" required/></label><br/>
<label>Total <input name="total" ng-model="total"
ng-change="updatePercentage()"
type="number" min="1" required/></label><br/>
<hr/>
Percentage: {{percentage}}
</form>
이제 시험해 볼 수 있어!
describe('Testing percentage controller', function() {
var $scope = null;
var ctrl = null;
//you need to indicate your module in a test
beforeEach(module('plunker'));
beforeEach(inject(function($rootScope, $controller) {
$scope = $rootScope.$new();
ctrl = $controller('MainCtrl', {
$scope: $scope
});
}));
it('should calculate percentages properly', function() {
$scope.count = 1;
$scope.total = 1;
$scope.updatePercentage();
expect($scope.percentage).toEqual(100);
$scope.count = 1;
$scope.total = 2;
$scope.updatePercentage();
expect($scope.percentage).toEqual(50);
$scope.count = 497;
$scope.total = 10000;
$scope.updatePercentage();
expect($scope.percentage).toEqual(5); //4.97% rounded up.
$scope.count = 231;
$scope.total = 10000;
$scope.updatePercentage();
expect($scope.percentage).toEqual(2); //2.31% rounded down.
});
});
수학 obj 전체를 필터로 감싸는 게 어때?
var app = angular.module('fMathFilters',[]);
function math() {
return function(input,arg) {
if(input) {
return Math[arg](input);
}
return 0;
}
}
return app.filter('math',[math]);
및 사용방법:
{{ number_var | 산술: '수치'}}
다음 옵션을 사용하는 것이 좋습니다.
{{(100*score/questionCounter) || 0 | number:0}}
값이 초기화되지 않은 경우 방정식의 기본값을 0으로 설정합니다.
Angular에서 간단한 라운드를 원하는 경우 식 안에 필터를 쉽게 설정할 수 있습니다.예를 들어 다음과 같습니다.
{{ val | number:0 }}
그 외의 번호 필터 옵션에 대해서는, 이 CodePen 의 예와 를 참조해 주세요.
Angular로 간단한 계산을 하는 가장 쉬운 방법은 페이지에서 대량 계산을 수행할 필요가 없다고 가정할 때 필요에 따라 개별 바인딩에 대한 HTML 마크업에서 직접 수행하는 것입니다.다음은 예를 제시하겠습니다.
{{(data.input/data.input2)| number}}
이 경우 ()에서 계산을 수행한 다음 필터 |를 사용하여 숫자 답을 얻을 수 있습니다.각도 숫자를 텍스트로 포맷하는 방법에 대한 자세한 내용은 다음과 같습니다.
https://docs.angularjs.org/api/ng/filter
글로벌 Math 개체를 스코프에 바인딩하거나 둘 중 하나(창이 아닌 $window 사용)
$scope.abs = $window.Math.abs;
HTML에서 바인딩을 사용합니다.
<p>Distance from zero: {{abs(distance)}}</p>
또는 원하는 특정 산술 함수에 대한 필터를 만듭니다.
module.filter('abs', ['$window', function($window) {
return function(n) {
return $window.Math.abs($window.parseInt(n));
};
});
HTML 의 필터를 사용합니다.
<p>Distance from zero: {{distance | abs}}</p>
그건 앵귤러 방식이 아닌 것 같은데요.왜 동작하지 않는지는 모르겠지만, 그러한 기능을 사용하려면 스코프에 액세스 할 필요가 있을 것입니다.
필터를 만드는 것이 좋습니다.그게 앵귤러 방식이야.
myModule.filter('ceil', function() {
return function(input) {
return Math.ceil(input);
};
});
다음으로 HTML에서 다음을 수행합니다.
<p>The percentage is {{ (100*count/total) | ceil }}%</p>
number
필터는 숫자를 수천 개의 구분자로 포맷하기 때문에 엄밀하게는 산술 함수가 아닙니다.
소수점인 는 '하다', '한계'가 없다.ceil
잘린 소수점(다른 답변이 당신을 믿게 할 수 있는 것처럼)은round
먹어버리죠.
따라서 원하는 함수를 다음과 같이 주입할 수 있습니다(전체 Math 객체를 주입하는 것보다 시뮬레이션이 더 쉽습니다).
myModule.filter('ceil', function () {
return Math.ceil;
});
다른 기능으로 포장할 필요도 없습니다.
이것은 (Sara Inés Calderon, Klaxon 및 Gothburz에 의한) 3개의 답변의 대략적인 요약입니다만, 모두 중요한 것을 추가했기 때문에, 솔루션에 참가해 설명할 가치가 있다고 생각합니다.
예를 들어 템플릿에서 다음 명령을 사용하여 계산을 수행할 수 있습니다.
{{ 100 * (count/total) }}
그러나 이 경우 소수점 이하가 될 수 있으므로 필터를 사용하는 것이 좋습니다.
{{ 100 * (count/total) | number }}
디폴트로는 번호 필터는 최대 3자리까지 남습니다.여기서는 fractionSize 인수가 매우 편리합니다({{ 100 * (count/total) | number:fractionSize }}
)는 다음과 같습니다.
{{ 100 * (count/total) | number:0 }}
또한 다음과 같이 결과가 이미 반올림됩니다.
angular.module('numberFilterExample', [])
.controller('ExampleController', ['$scope',
function($scope) {
$scope.val = 1234.56789;
}
]);
<!doctype html>
<html lang="en">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body ng-app="numberFilterExample">
<table ng-controller="ExampleController">
<tr>
<td>No formatting:</td>
<td>
<span>{{ val }}</span>
</td>
</tr>
<tr>
<td>3 Decimal places:</td>
<td>
<span>{{ val | number }}</span> (default)
</td>
</tr>
<tr>
<td>2 Decimal places:</td>
<td><span>{{ val | number:2 }}</span></td>
</tr>
<tr>
<td>No fractions: </td>
<td><span>{{ val | number:0 }}</span> (rounded)</td>
</tr>
</table>
</body>
</html>
마지막으로, 외부 데이터 소스에 의존하고 있는 경우는, 적절한 폴백치를 지정하는 것이 좋습니다(그렇지 않으면 사이트에 NaN이 표시되거나 아무것도 표시되지 않을 수 있습니다).
{{ (100 * (count/total) | number:0) || 0 }}
사이드노트:사양에 따라서는, 이미 낮은 레벨의 폴백/폴백을 보다 정확하게 정의할 수 있는 경우가 있습니다(예:{{(100 * (count || 10)/ (total || 100) | number:2)}}
). 단, 항상 이치에 맞는 것은 아닙니다.
파이프를 사용한 Angular Typescript 예제.
math.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'math',
})
export class MathPipe implements PipeTransform {
transform(value: number, args: any = null):any {
if(value) {
return Math[args](value);
}
return 0;
}
}
@NgModule 선언에 추가
@NgModule({
declarations: [
MathPipe,
템플릿에서 다음과 같이 사용합니다.
{{(100*count/total) | math:'round'}}
언급URL : https://stackoverflow.com/questions/12740329/math-functions-in-angularjs-bindings
'programing' 카테고리의 다른 글
이미지 높이와 너비가 작동하지 않습니까? (0) | 2023.03.18 |
---|---|
키와 값의 쌍(ng-value) (0) | 2023.03.18 |
네트워크 인터페이스 이름의 길이는 몇 개입니까? (0) | 2023.03.18 |
wordpress : 페이지에 카테고리와 태그를 추가하는 방법 (0) | 2023.03.18 |
양방향 데이터 바인딩(각도)과 단방향 데이터 흐름(React/Flux) (0) | 2023.03.18 |