GVKun编程网logo

javascript – 在AngularJS模块之间发送数据的正确方法是什么?(简述angularjs中模块的作用)

19

以上就是给各位分享javascript–在AngularJS模块之间发送数据的正确方法是什么?,其中也会对简述angularjs中模块的作用进行解释,同时本文还将给你拓展angular2–在RxJs5

以上就是给各位分享javascript – 在AngularJS模块之间发送数据的正确方法是什么?,其中也会对简述angularjs中模块的作用进行解释,同时本文还将给你拓展angular2 – 在RxJs 5中共享Angular 2 Http网络调用的结果的正确方法是什么?、Angular2,禁用锚元素的正确方法是什么?、angularjs – 从对象Angular JS中删除元素的正确方法是什么?、angularjs – 使用Angular&Express登录用户的正确方法是什么?等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

javascript – 在AngularJS模块之间发送数据的正确方法是什么?(简述angularjs中模块的作用)

javascript – 在AngularJS模块之间发送数据的正确方法是什么?(简述angularjs中模块的作用)

关于角度的伟大之处在于您可以拥有可在不同地方重复使用的独立模块.假设你有一个模块来绘制,订购和使用列表做很多事情.说这个模块将在您的应用程序周围使用.最后,说你想以不同的方式填充它.这是一个例子:
angular.module('list',[]).controller('listController',ListController);
var app = angular.module('myapp',['list']).controller('appController',AppController);

function AppController() {
  this.name = "MiSAE";
  this.fetch = function() {
    console.log("feching");
    //change ListController list
    //do something else
  }
}

function ListController() {
  this.list = [1,2,3];
  this.revert = function() {
    this.list.reverse();
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<divng-app="myapp" ng-controller="appController as App">

  <div>
    Name:
    <input type="text" ng-model="App.name" />
    <button ng-click="App.fetch()">Fetch</button>
  </div>

  <divng-controller="listController as List">
    <button ng-click="List.revert()">Revert</button>
    <ul>
      <li ng-repeat="item in List.list">{{item}}</li>
    </ul>
  </div>

</div>

现在,当您点击Fetch按钮时,您将使用$http发送名称(以及其他过滤器和内容)到API.然后,您将获得一些数据,包括您要绘制的项目列表.然后,您要将该列表发送到列表模块,以进行绘制.

它必须是这样的,因为您将在不同的地方使用列表模块,它将始终绘制列表,并添加一些功能,如重新排序和反转.虽然过滤器和API连接将更改,但您的列表行为将不会,因此必须有2个不同的模块.

也就是说,提取数据后,将数据发送到列表模块的最佳方式是什么?有服务?

解决方法

您应该使用 Angular components执行此任务.

您应该创建一个组件,该组件将显示列表,并提供一些可以修改列表的操作,并告诉父级更新该值.

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

list.controller('listCtrl',function() {
    this.reverse = function() {
        this.items = [].concat(this.items).reverse();
        this.onUpdate({ newValue: this.items });
    };
});

list.component('list',{
  bindings: {
    items: '<',onUpdate: '&'
  },controller: 'listCtrl',template: '<button ng-click="$ctrl.reverse()">Revert</button><ul><li ng-repeat="item in $ctrl.items">{{ item }}</li></ul>'
});

这样当您单击“还原”列表组件将反转数组并执行HTML元素的on-update属性中提供的功能.

然后,您可以简单地将您的应用程序设置为依赖于此模块

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

并使用列表组件

<list data-items="list" data-on-update="updateList(newValue)"></list>

您可以在the example中看到其余的代码

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工作方式-这是要求的一部分。

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&Express登录用户的正确方法是什么?

angularjs – 使用Angular&Express登录用户的正确方法是什么?

我正在建立一个简单的网站,我想让用户使用Facebook登录,然后根据他们是否登录来显示具有自定义项目的页面,即如果没有记录,它显示一些信息,但如果登录,则会根据用户信息显示其他信息。

我正在使用passportjs的Facebook模块,Express和Angular。我相信我有护照正确执行,但不知道1)我应该如何检查用户是否登录,以及2)根据用户状态显示视图的最佳做法,使用Angular&表现。我在这里看了一个例子,但不要以为这是我应该用Angular(https://github.com/jaredhanson/passport-facebook)

谢谢!

要完成@wpalahnuk答案,您必须创建一个服务或工厂来处理身份验证和一个httpInterceptor来拦截服务器发送的响应,以了解用户是否正在登录(检查代码401)。

对于Express部分,您必须使用真棒护照节点模块来处理服务器端身份验证。

你有这里的所有细节:https://vickev.com/#!/article/authentication-in-single-page-applications-node-js-passportjs-angularjs

这篇文章真的很棒,Brad Green(Google AngularJS的工程总监)向我介绍了这篇文章。

希望有帮助

如果您想了解更多有关Angular安全性的内容,您只需要问问,我们很乐意为您提供帮助。

今天关于javascript – 在AngularJS模块之间发送数据的正确方法是什么?简述angularjs中模块的作用的讲解已经结束,谢谢您的阅读,如果想了解更多关于angular2 – 在RxJs 5中共享Angular 2 Http网络调用的结果的正确方法是什么?、Angular2,禁用锚元素的正确方法是什么?、angularjs – 从对象Angular JS中删除元素的正确方法是什么?、angularjs – 使用Angular&Express登录用户的正确方法是什么?的相关知识,请在本站搜索。

本文标签: