小编Bra*_*ens的帖子

角度量角器 - 在E2E测试后保持浏览器打开

在Angular Protractor测试运行后,是否可以让测试浏览器窗口保持打开状态?我在FireFox中遇到了严峻的测试失败,访问网页状态以查看正在发生的事情非常有用.

angularjs protractor

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

AngularJS $ scope.$ watch on json对象无法在指令内工作

我在这里遗漏了一些明显的东西.在我的指令中,我有一个工作的双向数据绑定,但我似乎无法使用$ scope.$ watch()来监视指令的父作用域js对象上可能发生的更改.

http://jsfiddle.net/Kzwu7/6/

正如您所看到的,当我尝试在attrs.dirModel上使用$ watch时,结果值是未定义的,并且没有进一步观察,即使我在短暂延迟后修改对象.我也试过在$ watch语句中使用(而不是使用)true标志.

HTML:

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.4/angular.min.js"></script>

<div ng-app="test" ng-controller="MainCtrl">
    <dir dir-model="model"></dir>
    <p>{{model.tbdTwoWayPropA}}</p>
</div>

<script type="text/ng-template" id="template">
    <div class="test-el">{{dirModel.tbdTwoWayPropB}}</div>
</script>
Run Code Online (Sandbox Code Playgroud)

JS:

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

app.controller("MainCtrl", [
    "$scope", "$timeout",
    function($scope, $timeout){
        $scope.model = {
            tbdTwoWayPropA: undefined,
            tbdTwoWayPropB: undefined,
            tbdTwoWayPropC: undefined
        }

        // TBD Ajax call
        $timeout(function(){

            // alert("Model updated, but $scope.$watch isn't seeing it.");

            $scope.model.tbdTwoWayPropA = 1;
            $scope.model.tbdTwoWayPropB = 30;
            $scope.model.tbdTwoWayPropC = [{ a: 1 },{ a: 2 },{ a: 3 }];

        }, 2000) …
Run Code Online (Sandbox Code Playgroud)

angularjs

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

使用 HTML iFrame 代理和 Javascript 打印 S3 托管的私有 PDF - webkit 中的空白页面

我正在开发一个应用程序,我们使用PDFJS在应用程序内渲染 PDF。这些 PDF 托管在 S3 上,由于跨源问题,打印它们变得很棘手。

我们构建了一个特殊的视图,用作 iframe 代理,并托管在我们的服务器上(以消除跨域)。iframe 代理依次加载另一个具有实际 S3 PDF 内容的 iframe。

在 FireFox 中,我们可以通过运行以下命令成功打印代理 iframe:

var iframe = document.getElementById('printIframe') 
iframe.focus()
iframe.contentWindow.print()
Run Code Online (Sandbox Code Playgroud)

但是,在 Chrome 和 Safari 中,此方法会生成空白页面。有什么想法吗?

我们也进行了测试var pdfWindow = window.open( pdfUrl ); pdfWindow.print();,但这同样不成功。

编辑详细信息:

iframe 代理代码非常简单。

我们正在托管iframe_proxy.html?path-to-s3-file.pdf,它像这样填充嵌套的 iFrame 。

<!DOCTYPE html>
<html>
<head>
    <style type="text/css">
    html,
    body,
    iframe {
        display: block;
        height: 100%;
        width: 100%;
        margin: 0;
        padding: 0;
        border-style: none;
    }
    </style>
</head>
<body>
    <iframe frameborder="0" height="100%" src="path-to-s3-file.pdf" width="100%"></iframe>
</body> …
Run Code Online (Sandbox Code Playgroud)

html javascript pdf iframe amazon-s3

5
推荐指数
0
解决办法
818
查看次数

使用$ window将AngularJS路由配置为深层路径

我有一个Rails应用程序,它有一些复杂的路由.我的Angular应用程序存在于深层URL中,例如/ quizzes/1

我希望这样做Angular是通过在我的路由配置中注入$ window然后嗅探$ window.location.pathName.这似乎不可能,因为应用程序在此阶段抛出"来自myApp的未知提供者:$窗口".

有没有一种最佳实践方法来处理Angular?我想这样做的原因是当应用程序位于深层目录中时使用HTML5模式.

这是我希望的一个例子,http://jsfiddle.net/UwhWN/.我意识到如果它是唯一的选项,我可以在程序的这一点使用window.location.pathname.

HTML:

<div ng-app="myApp"></div>
Run Code Online (Sandbox Code Playgroud)

JS:

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

  app.config([

    '$window', '$routeProvider', '$locationProvider',

    function($window, $routeProvider, $locationProvider) {

        var path = $window.location.pathname

       // Coming Soon
       // $locationProvider.html5Mode(true)

      $routeProvider
        .when(path + '/start', {
            controller: 'splashScreenController',
            templateUrl: 'partials/splash-screen.html'
        })

        .when(path + '/question/:id', {
            controller: 'questionController',
            templateUrl: 'partials/question-loader.html'
        })

        .otherwise({
          redirectTo: path + '/start'
        })
  }])
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

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

没有jQuery的AngularJS DOM /文档选择

AngularJS没有内置的DOM选择引擎,但提供了实用方法,可以处理jQuery为典型应用程序提供的部分内容.

但是,DOM选择仍然是王者,我试图将jQuery从我的应用程序中删除,仅用于DOM选择的唯一目的.

Angular提供$ document服务作为注入.我发现这很麻烦.例如,要使用$ document实现本机DOM选择,您需要将$ document注入所需的所有指令并调用querySelectorAll,然后使用Angular扩展它:

angular.element( $document[0].querySelectorAll('#element') )
Run Code Online (Sandbox Code Playgroud)

这太傻了.

在那里,我已经为自己提供了一个全球帮手,但它没有使用Angular的包装$文件......

  // Create a shortcut to querySelectorAll
  window.query = function(selector) {
    return document.querySelectorAll( selector )
  }

  // For use inside a directive like so...
  angular.element( query('#element') )
Run Code Online (Sandbox Code Playgroud)

AngularJS对于全局变量是全能的,并且包裹全局变量以保护和测试.有没有一种干净的方法我可以利用querySelectAll而不将$ document传递给每个指令?我可以像jQuery一样扩展angular.element但是利用querySelectorAll吗?

编辑:

我还想注意原始的JQLite库支持基本选择器https://code.google.com/p/jqlite/wiki/UsingJQLite#Supported_Selectors.

然而,AngularJS实现不支持选择器,也没有提到这个功能遗漏 - http://docs.angularjs.org/api/angular.element

相反,AngularJS会:

throw Error('selectors not implemented');
Run Code Online (Sandbox Code Playgroud)

^当传递给angular.element的项是一个不以'<'开头的字符串.

如果是这样的话会很好:

return document.querySelectorAll( element ) 
Run Code Online (Sandbox Code Playgroud)

...具有一些基本的错误预防逻辑.

javascript angularjs

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

使用其他方法扩展Angular是不是很糟糕?

我正在开发一个应用程序,并且Angular提供了一些我认为有用的方法.我启动了一个文件,用所需的方法扩展Angular,而不是创建一个实用程序服务并注入它(对于简单的jQuery-esque - 方法来说这似乎很麻烦).

所以,我一直在问我这是不是一个好主意?有理由避免这种做法吗?

例如 angular.extensions.js

// Angular has been previously loaded

;(function() {

  angular.extend(angular, {

    isEmptyObject: function(obj) {
      var name;
      for ( name in obj ) {
        return false;
      }
      return true;
    }

    // etc. for simple helpers

  })

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

javascript jquery angularjs

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

标签 统计

angularjs ×5

javascript ×4

amazon-s3 ×1

html ×1

iframe ×1

jquery ×1

pdf ×1

protractor ×1