小编Ole*_*leg的帖子

动态templateUrl - AngularJS

从Angular 1.1.4开始,您可以拥有一个动态模板URL.从这里开始,

templateUrl - 与模板相同,但模板是从指定的URL加载的.由于模板加载是异步的,因此编译/链接将暂停,直到加载模板为止.

您可以将templateUrl指定为表示URL的字符串,或者指定为带有两个参数tElement和tAttrs的函数(在下面的编译函数api中描述)并返回表示url的字符串值.

如何利用它来生成基于我的指令属性的动态模板?显然这不起作用,因为tAttrs.templateType只是字符串"templateType"

templateUrl: function (tElement, tAttrs) {
  if (tAttrs.templateType == 'search') {
    return '/b/js/vendor/angular-ui/template/typeahead/typeahead.html'
  } else {
    return '/b/js/vendor/angular-ui/template/typeahead/typeahead2.html'
  }
}
Run Code Online (Sandbox Code Playgroud)

鉴于我无法访问范围,我该如何管理?

angularjs angular-ui

16
推荐指数
1
解决办法
2万
查看次数

查询对象数组

任何人都有关于如何查询coffeescript中的哈希数组的指导?

例如,我有一个哈希数组,每个哈希都有一个"名称"和"设置":

[
  {"name":"color", "setting":"red"},
  {"name":"scale_min", "setting":"15"},
  {"name":"scale_type", "setting":"linear"},
  {"name":"x_axis_label", "setting":"Weeks"}
]
Run Code Online (Sandbox Code Playgroud)

我想在这个数组中找到哈希"name"为"x_axis_label"的元素

我怎么能用coffeescript轻松做到这一点?

我需要某种value_for_key_in_object(key, object)功能,并想知道是否会成为词典的一部分......

coffeescript

14
推荐指数
4
解决办法
1万
查看次数

在karma-runner/jasmine中分析内存泄漏

我有一个AngularJS应用程序,大约有2000个单元测试,占用大量内存.一旦测试启动,它们运行得非常快(在Chrome中),直到内存消耗达到1.5GB,此时每次测试开始需要大约3秒.

现在,我很该死的肯定,这是不是涉及到为什么我的AngularJS,噶/茉莉花测试运行的这么慢?.

在这一点上,我不知道它是否是泄漏的测试或应用程序本身.我想描述测试执行情况.

我已经阅读了单元测试karma-runner/jasmine profiling并尝试执行以下操作:

您可以使用localhost:9876/debug.html并配置内存.在执行之前检查内存(在Jasmine执行所有describe()块并收集测试之后)然后在执行测试之后 - 它应该是相同的.

但是怎么做呢?

我真的不明白如何检查之前和之后.我可以以某种方式暂停测试执行吗?茉莉是能够告诉我何时"收集测试"并等待我进行分析?

或者还有其他方法吗?

unit-testing memory-leaks jasmine angularjs karma-runner

13
推荐指数
1
解决办法
2712
查看次数

在单独的上下文中运行js代码并访问其全局变量

我想在节点中运行第三方JavaScript文件(我对其内容没有太多控制权),并在其上下文中访问由该文件的代码创建的全局变量.

我考虑过两件事:

  1. vm沙箱中运行代码.问题是我不知道如何正确创建上下文,因为vm.createContext([sandbox])不会自动提供基本的东西,比如console或者require我想要运行的脚本.

    这有点令人失望,因为文档明确指出(强调我的):

    如果给定沙盒对象,将"上传"该沙箱,以便可以在调用vm.runInContext()或script.runInContext()时使用它.在内部脚本中运行,沙箱将是全局对象,保留其所有现有属性,但也具有任何标准全局对象具有的内置对象和函数.

    什么是"任何标准全局对象具有的内置对象和函数"?我天真地假设它的东西一样console,process,require等,但如果是这样,API不起作用,因为那些没有设置.我可能在这里误解了一些东西.

    var sandbox = vm.createContext({foo: 'foo'});
    var code = 'console.log(foo);';
    vm.runInContext(code, sandbox);
    
    Run Code Online (Sandbox Code Playgroud)

    结果如下:

    evalmachine.:1
    console.log(foo);
    ^
    ReferenceError:未定义控制台

  2. 子进程中运行代码.但我找不到任何关于访问子进程的全局变量的文档.我假设与子进程通信的唯一方法是通过消息传递,但即使这似乎是从父对子,而不是反过来...

基本上,我被卡住了.HALP.

javascript node.js

11
推荐指数
1
解决办法
1451
查看次数

在CoffeeScript中查找范围

我理解如何在CoffeeScript中定义数组范围

lng[1..10]
Run Code Online (Sandbox Code Playgroud)

但是,如果我有

data = 10
Run Code Online (Sandbox Code Playgroud)

如果10在1和11的范围内,最好的方法是什么?

if data is between(1..11)
  return true
Run Code Online (Sandbox Code Playgroud)

coffeescript

10
推荐指数
1
解决办法
3774
查看次数

日期使用d3.js排序

免责声明:我不知道我在做什么.说真的,我喜欢数据,并认为自己做这将是学习编程和使用数据库以及使网络应用程序像一个很酷的家伙的好方法.我一直在寻找最后一天的答案,而我能找到的所有例子都无法使用我的代码.

这是我正在使用的完整代码和数据的粘贴框.这是对我的数据填入d3.js github上发现了样品线图. http://pastebin.com/7aW6wegd

json来自couchdb数据库

我可以得到画线,但它们是一团糟:

在此输入图像描述

我认为这是由于日期没有正确排序造成的,因为在控制台中它们是按顺序列出的.我无法弄清楚如何正确排序日期.使用d3.time.format会抛出错误(你可以在我从代码行图中获取的代码中实际看到它,它们使用它来解析日期.使用它和我的数据会引发错误,即使在我尝试转向之后时间戳到日期)我似乎无法弄清楚如何在couchdb中排序日期.

javascript sorting json date d3.js

10
推荐指数
1
解决办法
7646
查看次数

jQuery动画设置回调引发错误

我想实现一个jQuery动画回调方法进度或步骤,

但在任何一种情况下,我都收到以下错误:

NS_ERROR_IN_PROGRESS: Component returned failure code: 0x804b000f (NS_ERROR_IN_PROGRESS) [nsICacheEntry.dataSize]
Run Code Online (Sandbox Code Playgroud)

我搜索了很多,但无法在上下文中找到任何内容,我有点卡在这里,请建议什么可能导致此错误?

在小提琴我尝试了步骤和进展,它在那里工作,但不能让它在我的代码中工作,我只是看,有一个人在jquery动画中遇到这样的错误?

示例代码是:

    this.taskHandle.find('img').stop(true, true).animate({
        //todo//
        top: vtop, // this.taskHandle.outerHeight(),
        //'top': 0 - $('.target.upper').height(),
        width: 0,
        opacity: 0
    }, {
        duration: 2000,
        step: function(){
            console.log('I am called');
        }
    },

    $.proxy(function() {
        // some css clearing method
    }, {
        // some further actions after animation completes
    })
);
Run Code Online (Sandbox Code Playgroud)

javascript css jquery jquery-animate

8
推荐指数
1
解决办法
4151
查看次数

在触发请求之前刷新Interceptor中的令牌

把头发拉出来.如果用户的访问令牌即将到期,我想刷新访问令牌.

authService.isUserLoggedIn()返回一个promise并检查用户是否已登录.如果不是,则刷新用户的访问令牌.

但问题是authService.isUserLoggedIn()异步调用,在它返回值之前,拦截器将完成其工作,并且不会使用新令牌填充Authorization标头...

在脚本继续之前,我一直在寻找一种等待承诺解决的方法.不幸的是,我无法完成所需的任务.

码:

.factory('SEHttpInterceptor', function($injector, ngWebApiSettings) {
    return {
        // optional method
        'request': function(config) {

          // add Authorization header if available
          if (config.url.indexOf(ngWebApiSettings.apiServiceBaseUri) >-1){
            var authService = $injector.get('authService2');
              authService.isUserLoggedIn().then(function(response){
                var authData = $injector.get('$localStorage').getObject("authorizationData");
                config.headers.Authorization = 'Bearer ' + authData.token;
              });
          }   
          return config;
        }
      };
});
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

7
推荐指数
1
解决办法
2588
查看次数

Angularjs - 最简单的方法来向范围添加承诺,现在Angular已弃用自动解包承诺

我非常喜欢承诺被自动包装的干净(并且我认为易于遵循)方式:

$scope.myData = DataService.query({something:"etc"}); // done;
Run Code Online (Sandbox Code Playgroud)

而且我真的不关心现在这样做的标准方法,没有自动解包:

DataService.query({something:"etc"}).$promise.then(function (data){
    $scope.myData = data;
});
Run Code Online (Sandbox Code Playgroud)

我想看到的是这样的:

$scope.pulseData = $scope.setPromise(CitsciAnalytics.pulse({
    projId:"yardmap"
}));
Run Code Online (Sandbox Code Playgroud)

但我看不出如何实现这一目标.我得到的最接近的是:

$scope.pulseData = $scope.setPromise("pulseData", CitsciAnalytics.pulse({
    projId:"yardmap"
}));
Run Code Online (Sandbox Code Playgroud)

使用添加到根范围的函数:

.run(["$rootScope", "$log", function ($rootScope, $log) {
    //parent method to avoid promise unwrapping boilerplate
    $rootScope.setPromise = function (scopeVar, promise) {
        if (arguments.length === 2 && promise && promise.$promise) {
            var scope = this;
            promise.$promise.then(function (data){
                scope[scopeVar] = data;
            });
        } else {
            $log.error("$rootScope.setPromise has invalid arguments");
        }
    };
}]);
Run Code Online (Sandbox Code Playgroud)

但我不喜欢unDRY要求必须将范围变量名称作为附加字符串传递.有没有其他人解决这个问题,或者看到一种方法更干净地做到这一点?

angularjs angularjs-scope angular-promise

5
推荐指数
1
解决办法
2668
查看次数

有什么方法可以改善JavaScript数组的性能?

我正在将一些OpenGL代码移植到WebGL,而且JavaScript没有真正的数组这一事实令人难过.我可以使用Float32Array(和其他ArrayBuffer类型),但这似乎没有帮助性能.

作为比较Arrayvs Float32ArrayFloat64Array性能的实验,我对100000个浮点数进行冒泡排序以查看是否存在任何差异:

function bubbleSort(array) {
    var N = array.length;
    for (var i = 0; i < N; i++) 
        for (var j = i; j < N-1; j++)
            if (array[j] > array[j+1]) {
                var tmp = array[j];
                array[j] = array[j+1];
                array[j+1] = tmp;
            }
}

// var nums = new Array(100000);        // regular 'JS' array
// var nums = new Float32Array(100000);   // actual buffer of 32-bit floats
var nums = new …
Run Code Online (Sandbox Code Playgroud)

javascript arrays

5
推荐指数
1
解决办法
1212
查看次数