GVKun编程网logo

将AngularJS中的文档级键事件绑定到特定路由/控制器的正确方法是什么?

17

本篇文章给大家谈谈将AngularJS中的文档级键事件绑定到特定路由/控制器的正确方法是什么?,同时本文还将给你拓展Angular.js:.value()是设置应用程序范围常量的正确方法以及如何在控制

本篇文章给大家谈谈将AngularJS中的文档级键事件绑定到特定路由/控制器的正确方法是什么?,同时本文还将给你拓展Angular.js:.value()是设置应用程序范围常量的正确方法以及如何在控制器中检索它的正确方法、angular2 – 在RxJs 5中共享Angular 2 Http网络调用的结果的正确方法是什么?、Angular2,禁用锚元素的正确方法是什么?、angularjs – 从对象Angular JS中删除元素的正确方法是什么?等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

将AngularJS中的文档级键事件绑定到特定路由/控制器的正确方法是什么?

将AngularJS中的文档级键事件绑定到特定路由/控制器的正确方法是什么?

我有一个单页应用程序可以打开一个库.我想仅在图库打开时绑定文档级别键盘事件(用于键盘库控件),即.当路线匹配时

.when('/reference/:galleryId/:imageId/',{ templateUrl: '/partials/gallery.htm',controller: 'galleryController',controllerAs: 'reference' })

当我离开这条路线时,我想解开它.

可能有问题的一件事是,我阻止在同一个图库中的图像之间重新加载视图:

.run(['$route','$rootScope','$location',function ($route,$rootScope,$location) {
    var original = $location.path;
    $location.path = function (path,reload) {
        if (reload === false) {
            var lastRoute = $route.current;
            var un = $rootScope.$on('$locationChangeSuccess',function () {
                $route.current = lastRoute;
                un();
            });
        }
        return original.apply($location,[path]);
    };
}])

演示(点击“Fotografie”打开图库)
http://tr.tomasreichmann.cz/

Angular wiz救援?

感谢您的时间和精力

解决方法

您可以将keyup事件绑定到控制器构造函数中的$document,然后在控制器的$scope被销毁时解除绑定.例如:

.controller('galleryController',function ($scope,$document) {
  var galleryCtrl = this;

  function keyupHandler(keyEvent) {
    console.log('keyup',keyEvent);
    galleryCtrl.keyUp(keyEvent);

    $scope.$apply(); // remove this line if not need
  }

  $document.on('keyup',keyupHandler);
  $scope.$on('$destroy',function () {
    $document.off('keyup',keyupHandler);
  });

  ...
});

当视图变为非活动状态时,将不会遗留任何内容.

如果您觉得在控制器中执行此操作是不对的,可以将其移动到自定义指令中并将其放在视图的模板中.

Angular.js:.value()是设置应用程序范围常量的正确方法以及如何在控制器中检索它的正确方法

Angular.js:.value()是设置应用程序范围常量的正确方法以及如何在控制器中检索它的正确方法

嗨,我在那里观看了几个angular.js视频,并看到value()方法用于设置一种模块范围的常量。例如,可以这样设置Angular-
UI库的配置:(咖啡脚本)

angular.module('app',[])
.value "ui.config",tinymce:
    theme: 'simple'
    width: '500'
    height: '300'

我的应用目前看起来像这样:

window.app = angular.module("app",[ 'ui'])

.config(["$routeProvider",($routeProvider) ->
  $routeProvider
  .when "/users",templateUrl: "assets/templates/users/index.html"
    controller: IndexUsersCtrl

  .otherwise redirectTo: "/users"

])

.value 'csrf',$('meta[name="csrf-token"]').attr('content') #<---- attention here

IndexUsersCtrl = ($scope) ->
  $scope.users = gon.rabl
  console.log "I want to log the csrf value here" #<---- then attention
IndexUsersCtrl.$inject = ['$scope']

但是我似乎无法通过点击与app模块相对应的’app’变量来获取该值。

我在ST和angularjs的google组上都读到过,一种共享通用代码btwn控制器的方式是通过服务,这种概念在这里也适用吗?

谢谢!

angular2 – 在RxJs 5中共享Angular 2 Http网络调用的结果的正确方法是什么?

angular2 – 在RxJs 5中共享Angular 2 Http网络调用的结果的正确方法是什么?

通过使用Http,我们调用一个执行网络调用并返回http observable的方法:
getCustomer() {
    return this.http.get('/someUrl').map(res => res.json());
}

如果我们采取这个可观察并添加多个订阅者:

let network$ = getCustomer();

let subscriber1 = network$.subscribe(...);
let subscriber2 = network$.subscribe(...);

我们要做的是确保这不会导致多个网络请求。

这可能看起来像一个不寻常的情况,但其实是很常见的:例如,如果调用者订阅了observable显示一个错误消息,并将其传递给模板使用async管道,我们已经有两个订阅者。

在RxJs 5中正确的做法是什么?

也就是说,这似乎工作正常:

getCustomer() {
    return this.http.get('/someUrl').map(res => res.json()).share();
}

但是这是在RxJs 5中这样做的惯用方法,还是我们应该做别的事情呢?

缓存数据,如果可用缓存,返回否则做出HTTP请求。
import {Injectable} from '@angular/core';
import {Http,Headers} from '@angular/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/observable/of';
import 'rxjs/add/operator/share';
import 'rxjs/add/operator/map';
import {Data} from './data';

@Injectable()
export class DataService {
  private url:string = 'https://cors-test.appspot.com/test';

  private data: Data;
  private observable: Observable<any>;

  constructor(private http:Http) {}

  getData() {
    if(this.data) {
      // if `data` is available just return it as `Observable`
      return Observable.of(this.data); 
    } else if(this.observable) {
      // if `this.observable` is set then the request is in progress
      // return the `Observable` for the ongoing request
      return this.observable;
    } else {
      // example header (not necessary)
      let headers = new Headers();
      headers.append('Content-Type','application/json');
      // create the request,store the `Observable` for subsequent subscribers
      this.observable = this.http.get(this.url,{
        headers: headers
      })
      .map(response =>  {
        // when the cached data is available we don't need the `Observable` reference anymore
        this.observable = null;

        if(response.status == 400) {
          return "FAILURE";
        } else if(response.status == 200) {
          this.data = new Data(response.json());
          return this.data;
        }
        // make it shared so more than one subscriber can get the result
      })
      .share();
      return this.observable;
    }
  }
}

Plunker example

另请参见缓存HTTP响应以获得更多RXjsy方法

Angular2,禁用锚元素的正确方法是什么?

Angular2,禁用锚元素的正确方法是什么?

我正在 Angular2 应用程序上工作,我需要显示-但是disable<a> HTML 元素。正确的方法是什么?

更新

请注意*ngFor,这会阻止使用选项,*ngIf而不是<a>完全渲染。

<a *ngFor="let link of links"   href="#"    [class.disabled]="isDisabled(link)"    (click)="onClick(link)">   {{ link.name }}</a>

打字稿 组件有一个方法,看起来像这样:

onClick(link: LinkObj) {    // Do something relevant with the object...     return false;}

我实际上需要防止元素被单击,而不仅仅是与 CSS
一起出现。我以为我首先需要潜在地绑定到[disabled]属性,但这是不正确的,因为锚元素没有disabled属性。

我查看并考虑过使用,pointer-events: none但是这妨碍了我的cursor: not-allowed工作方式-这是要求的一部分。

答案1

小编典典

pointer-events:none在CSS中指定会禁用鼠标输入,但不会禁用键盘输入。例如,用户仍然可以选择链接并通过Enter按键或(在Windows中)≣Menu键“单击”它。您可以通过拦截keydown事件来禁用特定的击键操作,但这可能会使依赖辅助技术的用户感到困惑。

禁用链接的最佳方法可能是删除其href属性,使其成为非链接。您可以使用条件href属性绑定来动态地执行此操作:

<a *ngFor="let link of links"   [attr.href]="isDisabled(link) ? null : ''#''"   [class.disabled]="isDisabled(link)"   (click)="!isDisabled(link) && onClick(link)">   {{ link.name }}</a>

或者,按照GünterZöchbauer的回答,您可以创建两个链接,一个链接为正常链接,一个链接为禁用链接,并用于*ngIf显示一个或另一个链接:

<ng-template ngFor #link [ngForOf]="links">    <a *ngIf="!isDisabled(link)" href="#" (click)="onClick(link)">{{ link.name }}</a>    <a *ngIf="isDisabled(link)">{{ link.name }}</a></ng-template>

这是一些使链接看起来被禁用的CSS:

a.disabled {    color: gray;    cursor: not-allowed;    text-decoration: underline;}

angularjs – 从对象Angular JS中删除元素的正确方法是什么?

angularjs – 从对象Angular JS中删除元素的正确方法是什么?

我有ng-repeat功能ng-click里面:

<div ng-repeat="item in data.education_list">
   <a href="" ng-click="deleteEducation(item)">Delete</a>
</div>

我将对象项从ng-repeat传递给函数deleteEducation以从data.education_list中删除元素.

所以外观功能:

$scope.deleteEducation = function (item){
    $scope.data.education_list.splice($scope.data.education_list.indexOf(item),1);
}

所以这种方式有时不正确.当我在ng-repeat中有一些元素并且在删除项目之后我的模板HTML被更新并删除了另一个项目的行,而不是我删除的项目.

什么是正确的删除方式?

如果执行{{data.education_list}},data.education_list是对象数组:

[{"name":"Test1","time":"01 Hun 2004 - 12 Sun 2006","Idusereducation":"86","usereducationIdToUser":"702","type":"1"}]

问题二:
如果我有对象的对象而不是带键的数组:

{"1" : {obj},2 : "obj"}

如果我尝试按键从对象中删除元素:

删除OBJ [1];
我遇到了同样的问题.

解决方法

最简单的方法是使用$index,这是angular添加到轨道数组的唯一标识符.

<div ng-repeat="item in data.education_list">
   <a href="" ng-click="data.education_list.slice($index,1)">Delete</a>
</div>

如果您要过滤列表

你需要搜索索引.然后做拼接.它有点重,但如果您要过滤列表则需要.

JS

this.removeItem = function(item) {
    var index = $scope.data.education_list.indexOf(item);
    if (index != -1) {
        $scope.data.education_list.splice(index,1);
    }
  };

HTML

ng-click="myctrl.removeItem(item)"

Working Example click to delete and .indexOf vs $index comparison

今天关于将AngularJS中的文档级键事件绑定到特定路由/控制器的正确方法是什么?的介绍到此结束,谢谢您的阅读,有关Angular.js:.value()是设置应用程序范围常量的正确方法以及如何在控制器中检索它的正确方法、angular2 – 在RxJs 5中共享Angular 2 Http网络调用的结果的正确方法是什么?、Angular2,禁用锚元素的正确方法是什么?、angularjs – 从对象Angular JS中删除元素的正确方法是什么?等更多相关知识的信息可以在本站进行查询。

本文标签: