AngularJS toArray将对象键转换为数字(angularjs字符串转数字)
25-02-06
16
本文将分享AngularJStoArray将对象键转换为数字的详细内容,并且还将对angularjs字符串转数字进行详尽解释,此外,我们还将为大家带来关于Angular8.3.2:将ArrayBuff
本文将分享AngularJS toArray将对象键转换为数字 的详细内容,并且还将对angularjs字符串转数字 进行详尽解释,此外,我们还将为大家带来关于Angular 8.3.2:将ArrayBuffer转换为Float32Array、AngularJS directive返回对象属性详解_AngularJS、angularjs – Angular JS:当对象引用另一个对象时,angular.copy会使浏览器崩溃、angularjs – Angular Stripe – 将条带支付表格转换为条纹元素 的相关知识,希望对你有所帮助。
本文目录一览:
AngularJS toArray将对象键转换为数字(angularjs字符串转数字)
我在我的项目中使用角度过滤器按页面对输出对象进行排序问题是当我使用这样的语法时:
<ulng-repeat="(key,value) in list | groupBy: 'styl' | toArray | orderBy:'page'">
{{key}}
<li ng-repeat="dziecko in value | filter:search | bookmark:search"
ng-ng-click="openItem(dziecko)">
{{dziecko.rodzina}}
<b>{{dziecko.page}}</b>
</li>
</ul>
Angular将’styl’属性[‘Nowoczesny’,’klasyczny’..]转换为数字.排序工作正常,但我想获取名称而不是数字.
解决方法
groupBy返回一个对象,orderBy将数组作为参数,这就是你应该使用toArray过滤器的原因.
toArray这样的工作: 用法:对象| toArray:addKey [可选] 如果addKey设置为true,则过滤器还会将新属性$key附加到包含我们正在迭代的对象中使用的原始键的值以引用该属性
所以,你可以做这样的例子,或者看看jsbin
JS:
$scope.groups = [
{ category: 'alpha',id: 2 },{ category: 'beta',id: 3 },{ category: 'gamma',id: 0 },{ category: 'alpha',id: 4 },id: 5 },id: 1 }
];
HTML:
<ul ng-repeat="group in groups | groupBy:'category' | toArray:true | orderBy:min">
<!-- print the group name -->
<li>{{ group.$key }}</li>
<!-- iterate over the group members and order each group by id -->
<li ng-repeat="item in group | orderBy:'id'">
{{ item }}
</li>
</ul>
结果:
>阿尔法> {“category”:“alpha”,“id”:2}> {“category”:“alpha”,“id”:4}> beta> {“category”:“beta”,“id”:3}> {“category”:“beta”,“id”:5}>伽马> {“category”:“gamma”,“id”:0}> {“category”:“gamma”,“id”:1}
Angular 8.3.2:将ArrayBuffer转换为Float32Array 以下代码有效:
this.wsSubscription = this.webSocket.createObservableSocket ("ws://localhost:8080")
.subscribe (
data =>
{
var bufferPromise = data.arrayBuffer();
data.arrayBuffer().then (buffer =>{
var arr32 = new Float32Array (buffer);
}
AngularJS directive返回对象属性详解_AngularJS 写在前面:由于directive部分是angularjs中的重中之重,所以会分多篇章进行讲解。本章主要讲解directive返回对象中比较简单的属性
angularjs中使用.directive()来定义指令,该方法接收两个参数:name(指令的名字)、factory_function(该函数定义指令的全部行为,返回一个对象)
栗子:
//index.js
angular.module(''myApp'',[]);
myApp.directive(''myDirective'',function() {return {};}); 登录后复制
返回对象中包含以下属性及方法:
1:restrict:String
该属性用来说明myDirective指令在DOM中是以何种形式被声明的(即在html中该把它用在什么地方)
该属性可选值有:E(元素)、A(属性,默认值)、C(类名)、M(注释),可单独使用,也可组合使用
看到过一种说法:如果是想要自定义一个独立的指令功能,即该指令独立完成一系列操作,不用依附其他元素、属性等,就将该指令定义为元素;如果想要用该指令来扩展某已存在指令的功能,便将其定义为属性。不知道这么理解是否合理,但确实也是一个很好的可以借鉴的选择方法标准
2:priority:Number
该属性用来定义指令的优先级(默认为0,ngRepeat是所有内置指令中优先级最高的,为1000),优先级高的先执行。
3:terminal:Boolean
该属性与priority属性有一定联系,它用来判断是否停止运行当前元素上比本指令优先级低的指令,但相同优先级的依旧会执行
栗子:
//index.js
angular.module(''myApp'',[])
.directive(''myDirective'',function() {
return {
restrict: ''AE'',
priority: 1,
template: ''<div>hello world</div>''
};
})
.directive(''myDirective1'',function() {
return {
restrict: ''AE'',
priority: 3,
terminal: true
};
})
登录后复制
<!-- index.html -->
<div my-directive my-directive1></div>
登录后复制
如果没有定义myDirective1指令,结果浏览器会显示hello world,但添加了myDirective1指令之后,并将其优先级priority设置比myDirective大,且在myDirective1上设置属性terminal属性为true之后,便会停止myDirective指令的执行。
4:template:String/Function
该属性定义一个模板(即在html文件中使用到该指令的部分会替换该模板内容,所以该模板主要是html格式)
属性有两种形式:一段html文本、一个返回模板字符串的函数,并且该函数接收两个参数:tElement,tAttrs
5:templateUrl:String/Function
当模板内容比较多时,直接嵌套在template中会显得冗余,可以采取将模板代码单独存放在一个文件中,这时就会需要引入文件,templateUrl便可以做到
属性也有两种形式:一个代表外部html文件路径的字符串、一个返回外部html文件路径字符串的函数,该函数接收两个参数:tElement,tAttrs
6:replace:Boolean
该属性默认值为false,指明模板是会被当做子元素插入到调用该指令的元素内部,还是覆盖取代调用该指令的元素。
栗子:
//index.js
angular.module(''myApp'',[])
.directive(''myDirective'',function() {
return {
restrict: ''A'',
template: ''<div>hello world</div>'',
replace: true/false
};
}) 登录后复制
<!-- index.html -->
<my-directive></my-directive> 登录后复制
当repalce取false时,浏览器端源码呈现为
hello world
取true时,呈现为hello world
7:transclude:Boolean
栗子:
<!-- index.html -->
<div my-directive>world</div>
登录后复制
像这个例子中,如果指令内部有内容,一般情况下template模板会直接覆盖替换掉该内容,但现在我想把它保留下来,这时transclude就派上用途了
//index.js
angular.module(''myApp'',[])
.dirctive(''myDirective'',function() {
return {
restrict: ''EA'',
transclude: true,
template: ''<div>hello <span ng-transclude></span></div>''
};
})
登录后复制
上面js代码会将html文件指令中包含的world内嵌到模板中span元素中,注意,span元素添加了ng-transclude内置指令属性(这点很重要)
总之,该属性的作用,是告诉angularjs编译器,将它从DOM元素中获取的内容放到它发现ng-transclude指令的地方.
以上就是本文的全部内容,希望对大家的学习有所帮助。
angularjs – Angular JS:当对象引用另一个对象时,angular.copy会使浏览器崩溃
我有以下
JavaScript / Angular代码:
var a = {};
var b = {};
a.ref = b;
b.ref = a;
angular.copy(a);
当angular.copy触发时,浏览器会锁定.我假设这是因为复制功能正在进行深层复制,当它开始复制b的引用时,它进入b然后想要复制它的引用,从而创建一个圆形副本,这将永远不会结束.
这个假设是对的吗?如果是这样,有没有办法避免这种情况?我假设答案将涉及改变数据的外观,但我很想听到别人的想法.
你的假设是对的,问题是循环引用. JSON.stringify也会抱怨这个结构. jQuery.extend在一个非常基本的层次上检测循环引用,并且可以在这里处理你的基本示例,但是
jQuery.extend has its own issues as well.如果你已经在使用jQuery,你可以使用extend,但是否则你可能想看看你自己写的东西,或者你可以使用我通过Google找到的这个花哨的cloneObject函数:
https://gist.github.com/NV/1396086
angularjs – Angular Stripe – 将条带支付表格转换为条纹元素
我曾经有Angular Stripe Checkout表单,我正在尝试将我的表单更新到最近推出的新
Stripe Card Elements.
删除表单输入字段并将其替换为Stripe Card元素后,我的表单如下所示:
<form name="payment" ng-submit="vm.submit()">
<div>
<label for="card-element">
Credit or debit card
</label>
<div id="card-element">
<!-- a Stripe Element will be inserted here. -->
</div>
</div>
<buttontype="submit" ng-disabled="vm.submitting">Pay!</button>
<div ng-show="vm.cardError">
<div>
<p>* {{vm.cardError}}</p>
</div>
</div>
</form>
以前在Angular中,当提交表单时,我正在从控制器处理submit()和stripeResponseHandler.使用新更改更新我的Angular Controller后,我的控制器现在看起来像这样:
function PaymentController() {
var vm = this;
var elements = stripe.elements();
var style = {
base: {
color: '#32325d',lineHeight: '24px',fontFamily: 'Helvetica Neue',fontSmoothing: 'antialiased',fontSize: '16px','::placeholder': {
color: '#aab7c4'
}
},invalid: {
color: '#fa755a',iconColor: '#fa755a'
}
};
vm.card = elements.create('card',{style: style});
vm.card.mount('#card-element');
// Handle real-time validation errors from the card Element.
vm.card.addEventListener('change',function(event) {
if (event.error) {
vm.cardError = event.error.message;
} else {
vm.cardError = '';
}
});
function submit() {
vm.cardError = '';
vm.submitting = true;
createtoken();
}
// Send data directly to stripe
function createtoken() {
stripe.createtoken(vm.card).then(function(result) {
if (result.error) {
vm.cardError = result.error.message;
vm.submitting = false;
} else {
// Send the token to your server
stripetokenHandler(result.token);
}
});
}
// Response Handler callback to handle the response from Stripe server
function stripetokenHandler(token) {
vm.tokenData = {
token: token.id
};
.. Process the rest in server ...
}
}
上面的代码按原样运行.但我对这些感到困惑:
1)由于Stripe现在使用DOM Manipulation将卡元素插入表单中,这是否会使我的上述方法错误,如Angular方式?意思是,我不应该再在Controller中执行这些操作并将它们移到指令中吗?或者应该没有必要,因为操纵的元素使用stripe.elements().
2)如果我确实需要将它们放在指令中,我只是不确定如何将上面的转换为angular指令.它首先通过挂载来操纵元素(可以添加到指令链接函数中),但后来它继续使用表单提交和事件处理程序的卡元素.我是否需要在指令链接本身内完成所有这些,在指令控制器中提交并在链接中进行元素操作?
我很困惑,坚持在这里做什么.如果我做错了,有人可以给我一个如何解决这个问题的样本吗?
我正在使用Angular 1.5.
解决方法
我现在已将Controller更改为指令,并将所有jquery和angular代码放在Link函数中.这是我的指令代码在更新后的样子:
function stripeForm() {
// Link Function
function link(scope,element,attrs) {
scope.submitCard = submitCard;
var elements = stripe.elements();
var style = {
iconStyle: 'solid',style: {
base: {
iconColor: '#8898AA',color: '#000',lineHeight: '36px',fontWeight: 300,fontSize: '19px','::placeholder': {
color: '#8898AA',},invalid: {
iconColor: '#e85746',color: '#e85746',}
},classes: {
focus: 'is-focused',empty: 'is-empty',};
var card = elements.create('card',style);
card.mount('#card-element');
// Handle real-time validation errors from the card Element.
card.on('change',function(event) {
setoutcome(event);
});
// Form Submit Button Click
function submitCard() {
var errorElement = document.querySelector('.error');
errorElement.classList.remove('visible');
createtoken();
}
// Send data directly to stripe server to create a token (uses stripe.js)
function createtoken() {
stripe.createtoken(card).then(setoutcome);
}
// Common Setoutcome Function
function setoutcome(result) {
var errorElement = document.querySelector('.error');
errorElement.classList.remove('visible');
if (result.token) {
// Use the token to create a charge or a customer
stripetokenHandler(result.token);
} else if (result.error) {
errorElement.textContent = result.error.message;
errorElement.classList.add('visible');
}
}
// Response Handler callback to handle the response from Stripe server
function stripetokenHandler(token) {
..send to server ...
}
}
// DIRECTIVE
return {
restrict: 'A',replace: true,templateUrl: 'payment/PaymentForm.html'
link: link
}
}
我的HTML文件现在是这样的:
<form ng-submit="submitCard()">
<div>
<label>
<div id="card-element"></div>
</label>
</div>
<div>
<buttontype="submit">Pay!</button>
<buttontype="button" ng-click="cancel()">Cancel</button>
</div>
<div>
<div></div>
</div>
</form>
今天关于AngularJS toArray将对象键转换为数字 和angularjs字符串转数字 的介绍到此结束,谢谢您的阅读,有关Angular 8.3.2:将ArrayBuffer转换为Float32Array、AngularJS directive返回对象属性详解_AngularJS、angularjs – Angular JS:当对象引用另一个对象时,angular.copy会使浏览器崩溃、angularjs – Angular Stripe – 将条带支付表格转换为条纹元素 等更多相关知识的信息可以在本站进行查询。