我想在D3中创建一种特殊的圆环图,其中包含正负值的不同环.值可以大于100%或小于-100%,因此将有一个代表剩余值的弧.以下是图表的示例图片:
第一个正类别(Category_1 - 灰色)值为80,因此80%用灰色填充圆圈,剩下20%用于下一个正类别.下一个正类别值(Category_2 - 橙色)是160.所以它首先使用Category_1剩下的20%(现在剩下140个值).然后将其填充所述下一个圆(向上)100%(现在剩下40值),并且对于剩余的值(40),它被向上创建部分圆.
现在,我们将Category_3(暗红色)视为负(-120%),因此如果创建一个向内的圆并将其填充100%(现在剩下20个值),那么它将为剩余值创建一个向内的弧(20 ).我们有另一个负类别(Category_4 - 红色),所以它会从那里以前的负类别(Category_3)结束开始,并从那里填写20%的面积.
编辑3:我创建了一个非常基本的基于圆弧的圆环图,当总值超过100时,我能够为剩余的值创建外环.下面是JSFiddle链接:
http://jsfiddle.net/rishabh1990/zmuqze80/
data = [20, 240];
var startAngle = 0;
var previousData = 0;
var exceedingData;
var cumulativeData = 0;
var remainder = 100;
var innerRadius = 60;
var outerRadius = 40;
var filledFlag;
var arc = d3.svg.arc()
.innerRadius(innerRadius)
.outerRadius(outerRadius)
for (var i = 0; i < data.length; i++) {
filledFlag = 0;
exceedingData = 0;
console.log("---------- Iteration: " + (i + 1) + "---------");
if (data[i] > remainder) { …Run Code Online (Sandbox Code Playgroud) 我正在使用Azure AD对我的单页应用程序(Angular4)进行身份验证,并使用Adal.js进行相同的操作。在登录页面上,我单击重定向到Microsoft AAD的按钮,并在成功登录后将其重定向回应用程序主页,并id_token从JWT 接收用户信息。
我需要access_token进行后端API访问,这是我试图通过ADAL AuthenticationContext的getCachedToken()方法获取的,并将clientId作为参数发送:
this.context.getCachedToken(this.configService.AdalConfig.clientId)
Run Code Online (Sandbox Code Playgroud)
但是此方法返回的令牌与会话存储的令牌相同id_token (adal.idtoken)。它基本上是通过使用级联键在会话存储中创建一个新项目,其值与id_token
adal.access_token.key + clientId = id_token
Run Code Online (Sandbox Code Playgroud)
例如:adal.access_token.key239f6fc7-64d2-3t04-8gfd-501efc25adkd = <id-token-value>。
我也尝试access_token用AuthenticationContext.acquireToken()方法来获取,但是它也给了id_token回头。
我要去哪里错了?
编辑:发布代码。
我正在调用该函数login(),并在成功登录后,尝试通过中的get accessToken()属性访问器获取主页中的访问令牌adal.config.ts。
config.service.ts
import { Injectable } from '@angular/core';
@Injectable()
export class ConfigService {
constructor() {}
public get AdalConfig(): any {
return {
tenant: 'common',
clientId: <application-id>,
redirectUri: window.location.origin + '/',
postLogoutRedirectUri: window.location.origin + '/'
}; …Run Code Online (Sandbox Code Playgroud) 我已经从JSON数据动态创建了一些链式选择框,我将从服务器收到这些数据.链接/级联的工作方式是每个选择框都是具有以下属性的命名对象:
选项:选项对象的数组,其中每个对象包含:(a)选项值(b)父选项值 - 用于映射当前值的父选择框值.(c)选项ID.
选定选项:具有两个属性的对象:(a)当前选定的值(b)当前所选值的ID.
我在"选项"标签中使用ng-repeat创建选择框,或者在"select"标签中使用ng-option,然后我使用自定义过滤器,我通过匹配父选项值来过滤检索到的选项(2) (2> b)选项值(2> a)与其父对象的"当前选择值"(3> a).基本上使用自定义过滤器从子选项值到选定父值进行多对一映射.
我能够正确映射父子选择框,但问题是当我更改父选择框值时,其子对象的"选定选项值"不会更新(子选择的项目不会抓取筛选列表中的第一项,导致孙子下拉不更新.)[1]
有没有办法,如果父值更改,子选择框(以及后续的子/孙)使用第一个选项值而不是当前空值初始化?
这是工作的plunker.(ng-repeat实施).真的很感激任何帮助.
HTML(ng-repeat):
<div ng-repeat="selection in vm.selectionData">
<div ng-repeat="(key, attribute) in selection.attributes">
<span>{{key}}</span>
<select class="form-control" ng-model="attribute.selectedOption.name">
<option ng-repeat="option in attribute.options | optionFilter : selection.attributes[attribute.parentAttr]">{{option.name}}</option>
</select>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
HTML(ng-options):
<div ng-repeat="selection in vm.selectionData">
<div ng-repeat="(key, attribute) in selection.attributes">
<span>{{key}}</span>
<select ng-model="attribute.selectedOption" ng-options="attribute.name for attribute in (attribute.options | optionFilter : selection.attributes[attribute.parentAttr]) track by attribute.id">
</select>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
JS:
myApp.filter('optionFilter', …Run Code Online (Sandbox Code Playgroud) 我试图按顺序打开2个角应用页面,以使用phantomjs获取截图.第1页需要在第2页之前打开,因为它为第2页准备了一些数据.我使用以下两种嵌套setTimeout()函数:
var page = require('webpage').create(),
t, url;
phantom.addCookie({
'name': 'token',
'value': '<authentication-token-goes-here>',
'domain': 'localhost'
});
t = Date.now();
url = "http://localhost:8000/#/page1";
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};
page.viewportSize = {
width: 1366,
height: 768
};
page.clipRect = {
top: 0,
left: 0,
width: 1366,
height: 768
};
page.open(url, function(status) {
setTimeout(function() {
console.log('page 1 status: ', status);
page.render("page1.png"); …Run Code Online (Sandbox Code Playgroud) 我正在尝试根据active变量使 HTML 标题处于活动/非活动状态。但要active在单击标题时设置标志,我使用指令$index变量ng-repeat:
<div ng-init="active = 1">
<h4 ng-repeat="(key, val) in vm.headings" ng-click="active = $index" ng-class="{'active': active === $index}">
{{key}}
</h4>
</div>
Run Code Online (Sandbox Code Playgroud)
标题对象:
vm.headings = {
"HEADING_1": "CONTENT",
"HEADING_2": "CONTENT",
"HEADING_3": "CONTENT"
};
Run Code Online (Sandbox Code Playgroud)
第一次加载时,其中一个标题按设置显示为“活动”。但在随后的点击中,它没有给出预期的结果。单击它们后,所有标题都会变为活动状态。这是小提琴。
我正在尝试使用以下sort()函数对包含字符串格式 (dd-mmm-yy) 日期的数组进行排序:
var array = ["1-jun-15", "1-feb-15", "1-apr-15", "1-may-15", "1-jan-15", "1-mar-15"];
array.sort(function(a, b) {
return new Date(a).getTime() - new Date(b).getTime();
});
Run Code Online (Sandbox Code Playgroud)
但没有成功。
这里出了什么问题?这是 JSFiddle。
编辑:虽然排序问题是通过小修正解决的,但主要问题是跨浏览器支持,下面的许多答案都有不同的解决方案。