小编gka*_*pak的帖子

39
推荐指数
3
解决办法
2万
查看次数

如何从Angular外部访问/更新$ rootScope

我的应用程序初始化$ rootScope中的对象图,就像这样......

var myApp = angular.module('myApp', []);

myApp.run(function ($rootScope) {
    $rootScope.myObject = { value: 1 };
});
Run Code Online (Sandbox Code Playgroud)

...然后从该对象图中消耗数据(仅限单向绑定),就像这样......

<p>The value is: {{myObject.value}}</p>
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果我随后(在页面渲染完成后)尝试更新$ rootScope并用新的替换原始对象,则会被忽略.我最初认为这是因为AngularJS保留了对原始对象的引用,即使我已经替换它.

但是,如果我将消耗的HTML包装在控制器中,我能够以预期的方式重复更新其范围,并且修改将正确地反映在页面中.

myApp.controller('MyController', function ($scope, $timeout) {
    $scope.myObject = { value: 3 };

    $timeout(function() {
        $scope.myObject = { value: 4 };

        $timeout(function () {
            $scope.myObject = { value: 5 };
        }, 1000);
    }, 1000);
});
Run Code Online (Sandbox Code Playgroud)

有没有办法通过$ rootScope实现这一点,还是只能在控制器内完成?此外,是否有更推荐的模式来实施此类操作?具体来说,我需要一种方法来替换AngularJS从AngularJS代码之外使用的完整对象图.

蒂姆,提前谢谢你的建议

编辑:正如评论中所建议的,我已经尝试在$ apply中执行更改,但它没有帮助:

setTimeout(function() {
    var injector = angular.injector(["ng", "myApp"]);
    var rootScope = injector.get("$rootScope");

    rootScope.$apply(function () {
        rootScope.myObject = { …
Run Code Online (Sandbox Code Playgroud)

angularjs rootscope

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

使用Jasmine 2.0在异步测试中获取"$ digest已在进行中"

我知道在摘要周期中调用$digest$apply手动会导致"$ digest已在进行中"错误,但我不知道为什么我在这里得到它.

这是一个包装服务的单元测试$http,服务很简单,只是防止对服务器进行重复调用,同时确保尝试执行调用的代码仍然获得预期的数据.

angular.module('services')
    .factory('httpService', ['$http', function($http) {

        var pendingCalls = {};

        var createKey = function(url, data, method) {
            return method + url + JSON.stringify(data);
        };

        var send = function(url, data, method) {
            var key = createKey(url, data, method);
            if (pendingCalls[key]) {
                return pendingCalls[key];
            }
            var promise = $http({
                method: method,
                url: url,
                data: data
            });
            pendingCalls[key] = promise;
            promise.then(function() {
                delete pendingCalls[key];
            });
            return promise;
        };

        return {
            post: function(url, data) {
                return …
Run Code Online (Sandbox Code Playgroud)

jasmine angularjs jasmine2.0

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

Jasmine calls.length和callCount未定义

我正在尝试使用Jasmine测试我的chrome扩展,但是我无法获得calls.length并按callCount预期行事.这两种情况下返回undefined.

我已经包含了代码和规范的示例.如果有帮助的话,这是代码的其余部分:https://github.com/DruRly/kamikaze/tree/closeIdleTab

如何重现:

  • git clone https://github.com/DruRly/kamikaze/tree/closeIdleTab
  • cd kamikaze
  • open SpecRunner.html

投机/ kamikazeSpec.js

describe("kamikaze", function() {
  describe("closeIdleTabs", function(){
    it("calls closeIdleTab for each tab received", function(){
      spyOn(kamikaze, 'closeIdleTab');

      kamikaze.closeIdleTabs([1,2,3]);
      expect(kamikaze.closeIdleTab.calls.length).toBe(3);
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

SRC/kamikaze.js

kamikaze = {
  ...

  closeIdleTabs: function(tabs){
    tabs.forEach(function(tab){
      test.closeIdleTab(tab);
    })
  },

  closeIdleTab: function(tab){
    if(tabTimeStamps[tab.id]){
      var secondsSinceUpdated = getSecondsSinceUpdated(tab.id)
      if(secondsSinceUpdated > (minutesUntilIdle * 60)){
        chrome.tabs.remove(tab.id)
      }
    }
  },

  ...
}
Run Code Online (Sandbox Code Playgroud)

javascript bdd google-chrome-extension jasmine jasmine2.0

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

通过Chrome扩展程序将文件上传为表单数据

我通过chrome扩展程序上传文件作为表单数据,我的代码如下所示.这里的问题是文件浏览窗口打开一秒钟然后消失.
该问题仅出现在Mac OS中.

manifest.json的:

"background": {
  "scripts": ["jszip.js", "background.js"]
},
Run Code Online (Sandbox Code Playgroud)

background.js:

chrome.runtime.onMessage.addListener(function (msg) {
  if (msg.action === 'browse')
  {
    var myForm=document.createElement("FORM");
    var myFile=document.createElement("INPUT");
    myFile.type="file";
    myFile.id="selectFile";
    //myFile.onclick="openDialog()";
    myForm.appendChild(myFile);
    var myButton=document.createElement("INPUT");
    myButton.name="submit";
    myButton.type="submit";
    myButton.value="Submit";
    myForm.appendChild(myButton);
    document.body.appendChild(myForm);
  }
});
Run Code Online (Sandbox Code Playgroud)

popup.js:

window.onload = function () {
  chrome.runtime.sendMessage({
    action: 'browse'
  });
}
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome google-chrome-extension

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

几秒钟后,阻止chrome.notifications API隐藏我的通知

我每天要做1-2次通知,重要的是用户不要错过它.有没有办法删除自动关闭,只允许用户手动关闭通知?

我在通知选项中看不到任何选项:

http://developer.chrome.com/extensions/notifications.html#type-NotificationOptions

google-chrome google-chrome-extension

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

表单验证 - 组中许多必需的一个

在我正在研究的项目中,目前我有三个文本框,我需要验证至少有一个文本框已经填充.

我一直在阅读Angular指令的自定义验证,我知道您可以使用以下命令设置指令链接函数中输入的有效性:

ctrl.$parsers.unshift(function(viewValue) {
  // validation logic here
});
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我不需要设置单个输入的有效性.如果不符合标准,我需要使整个表单无效.我只是想知道如何处理这个问题?

我想也许我应该创建一个放在封闭表单上的指令,然后使表单无效?

我想我只是在寻找一些关于我应该怎么做的指导,因为我有点不清楚从哪里开始 - 我正在阅读自定义验证的所有材料似乎都是为了验证特定的输入而不是表格上的一系列条件.

我希望我已经清楚了!谢谢..

angularjs

17
推荐指数
4
解决办法
3万
查看次数

Google Analytics嵌入Api服务器端授权C#

我正在尝试使用C#使用Google Analytics Embed API服务器端授权,代码如下

  public ActionResult Dashboard()
    {
        ViewBag.Message = "Dashboard.";
        var scopes = new string[]
        {
            AnalyticsService.Scope.Analytics, // view and manage your Google Analytics data
            AnalyticsService.Scope.AnalyticsReadonly,
            AnalyticsService.Scope.AnalyticsEdit
        };
        const string serviceAccountEmail = "526261635050-fofbfeicvbpgumafa114te878787878@developer.gserviceaccount.com";  
        const string keyFilePath = @"D:\key.p12";

        var status = RequestAccessTokenAsync(keyFilePath,scopes,serviceAccountEmail);
        ViewBag.Token = _accessToken;

        return View();
    }

    private async Task<bool> RequestAccessTokenAsync(string certificateFile, string[] scope, string serviceAccount)
    {
        var certificate = new X509Certificate2(certificateFile, "notasecret", X509KeyStorageFlags.Exportable);
        var serviceAccountCredential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccount)
        {
            Scopes = scope
        }.FromCertificate(certificate));

        var status = …
Run Code Online (Sandbox Code Playgroud)

c# google-analytics access-token

9
推荐指数
1
解决办法
702
查看次数

在同一页面中将值从ajax传递到php变量

从3天开始我正在努力从Ajax和PHP获得解决方案,我尝试了所有教程,但我无法得到解决方案,我是Ajax,Jquery的新手,但我的问题对你们来说非常简单.

我用jquery和PHP开发了网站,我用HTML(ul,li)创建菜单所以我想要的是,如果我点击菜单项ajax应该发送值到php变量然后执行php函数,但所有这一切都应该发生在同一页面,..

请帮我解决问题.

到目前为止,我尝试过以下方法:

JavaScript的:

<script type="text/javascript">
    $("#btn").click(function() {
        var val = "Hi";
        $.ajax ({
            url: "oldindex.php",
            data: val,
            success: function() {
                alert("Hi, testing");
            }
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

PHP和HTML:

<input type="submit" id="btn" value="submit">
<form name="numbers" id="numbers">
    <input type="text" name="number" id="number">
</form>

<div id="number_filters">
    <a href="abc">1</a>
    <a href="def">2</a>
    <a href="ghi">3</a>
</div>
Run Code Online (Sandbox Code Playgroud)

所以如果我点击href,我应该得到PHP变量的值它应该只在同一页面发生

php jquery

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

html 5画布绘图错误

我正在尝试根据html 5画布中绘制的矢量构建我的第一个几乎复杂的地图.

除了缩放之外,它运行良好.我注意到以下几点:

  • 在Firefox中,一切运行良好(除了鼠标滚轮,但这只是为了测试)
  • 在Chrome中使用鼠标滚轮缩小到比例因子<1时,看起来每次绘制时图像都会重复
  • 在Android和iOS中,使用缩放手势,存在最大的问题:每次重新绘制图像时都会出现重复的图像.

我一开始以为这是我的错,也许画布没有被清除.但经过一些测试,"幽灵"消失了,新鬼出现了.

如果有人可以提供帮助,那将会很酷.

代码 - HTML:

<div>
    <div style="position:absolute;top:30px;z-index:102;">
        <canvas id="canvas" width="1386" height="747" style="position:absolute;"></canvas>
    </div>
    <div style="position:absolute; top:30px;" id="debugText">Debug</div>
    <div style="position:absolute;top:30px; visibility: hidden;">
        <canvas id="debugCanvas" width="1386" height="747"></canvas>
    </div>
    <div style="position:absolute; left: 200px;z-index:99;" id="debugContols">
        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <a href="#" onClick="javascript:zoomIn(0, 0, 0.5);">Zoom 0.5</a>
        <a href="#" onClick="javascript:zoomIn(0, 0, 2);">Zoom 2</a>
        <a href="#" onClick="javascript:zoomIn(0, 0, 3);">Zoom 3</a>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

代码 - Javascript:

var canvas = document.getElementById("canvas");
var debugCanvas = document.getElementById("debugCanvas");
var ctx = canvas.getContext("2d");
var ctxDebug = debugCanvas.getContext("2d");
var context …
Run Code Online (Sandbox Code Playgroud)

html javascript html5 html5-canvas

7
推荐指数
2
解决办法
2068
查看次数