Arxius de la categoria: Angular

Punta van per les Directives Angular (O, Aprenent a estimar de guions de nou)

Tinc un parell d'apps que fan $http.get() trucades i jo volia ser capaç de mostrar un missatge d'error molt ben formatada amb lleig error detalls amagats, però accessible.  Bàsicament, això:

image

I llavors si l'usuari fa clic en l'error, veuen més informació:

image

Coses simples.  Ja que el mateix error potencial exacte poden aparèixer en la pantalla administrativa, així com la pantalla de l'usuari final, que diu clarament per una directiva Angular personalitzat.  JO  trobat això sèries destacades d'articles (http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-i-the-fundamentals) pel gran Dan Wahlin.  Seguint el seu Consell, Molt ràpidament em creat un <Hola món> Directiva i es va traslladar a la meva squeegee de exhibició d'error més complex. Corria a una mica de problemes amb aquesta Directiva més complex.  Feliçment, per casualitat una mena de, Jo havia dit WebStorm (l'editor que faig servir aquests dies) que l'arxiu JS era un fitxer Angular i m'ajudava a esbrinar l'assumpte.  Aquest és el codi per a la mateixa Directiva:

angular.Module("CDLApp").Directiva("generalCdlErrorHandler", funció() {

retorn {
restringir: "E",
substituir: True,

àmbit d'aplicació: {
retrieveLastConfigurationError: "&"
},

plantilla:
'<div class = "avisa' alerta-perill" paper = "avisa" ng-init = "doShowExpandedErrorDetails = true" ng-demostració = "retrieveLastConfigurationError()">' +
"Hi havia un error e/s o altre error. Normalment això passa perquè el fitxer de dades de configuració no podria ser ' +
"Hem trobat o el fitxer de configuració conté informació inexacta (com una biblioteca de documents de referència " +
"que no existeix).' +
' <br />' +
' <div ng-demostració = "doShowExpandedErrorDetails">' +
' <un href = "#" clic ng = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
"Feu clic aquí per amagar detalls." +
' </un>: ' +
' <br />' +
' <pre>{{retrieveLastConfigurationError() | JSON}}</pre>' +
' <br />' +
' </Div>' +
' <div ng-demostració = "!doShowExpandedErrorDetails">' +
' <un href = "#" clic ng = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
"Feu clic aquí per ampliar detalls d'error." +
' </un>' +
' </Div>' +
'</Div>'
};
});

Bàsicament, Estic creant un nou element anomenat una "generalCdlErrorHandler".  Necessita accés a una funció anomenada retrieveLastConfigurationError i que és tractada amb l'objecte d'abast.  Probablement podria tenir només utilitzava l'abast del pare, però que se sent mandrós.  Si algú pensa que hauria d'haver fet que, M'encantaria escoltar-lo en els comentaris.

Això estava tot bé, però jo no estava tenint res.  Apareixia a la consola d'errors (a mínim un cop em fixo tots els sx errors que he creat en el camí).  Simplement no aconseguia cap eixida des de la Directiva.  I se n'anava i afegia algun text estàtic abans la Directiva ng-demostració i jo * feia * aconseguir que. Això em va fer pensar que potser la Directiva no estava permès implícitament crear vars noves com "doShowExpandedErrorDetails" o tenir un "ng-init" allà. 

Tornava a l'HTML per veure que si hi hagués un tipus i aquesta vegada WebStorm m'ajudava.  Jo havia estat passant en la funció retrieveLastConfigurationError com aquest:

<general-cdl-error-controlador retrieveLastConfigurationError="CDLController.retrieveLastConfigurationError()">
</general-cdl-error-controlador>

Però el realment es necessita per ser això:

<general-cdl-error-controlador recuperar últim-configuració-error = "CDLController.retrieveLastConfigurationError()">
</general-cdl-error-controlador>

WebStorm era prou intel ligent com saber que havia de ser hyphenated.  Si no hagués proporcionava aquell toc, Em vols probablement ser encara depuració això somriure.  Temps de diversió!

El truc és això: no només és el nom de Directiva element hyphenated, així són cap atribut que afegir-hi.  Una vegada que afegia els guions, tot treballat gran.  Tutorial de Dan va passar a utilitzar noms individuals pocs, Així que jo no vaig fer la connexió.

Espero que això ajudi a algú.

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin

HTTP 406 Error quan s'utilitza $http.get Angular contra SharePoint resta punts finals

Actualització: Marc d'anunci ndersson assenyalar aquesta gran peça d'informació: http://Blogs.Office.com/2014/08/13/JSON-Light-support-Rest-SharePoint-API-Released/. Que explica molt :).

Que pot ser el pitjor títol d'una entrada de blog mai! Anyhoo.

Solen fer tota la meva prototipatge contra una instància de O365. Tinc el meu exemple personal per tal que no ha de preocupar per afectar a ningú més. Com acotació al marge – recordeu quan anomenem realitzades al voltant de màquines virtuals en nostres portàtils amb molsa-SQL Server, L'IIS, decidir Hyper-V contra. VMWare? Anyhoo...

Jo havia desenvolupat una aplicació utilitzant Angular en aquest entorn que fa, entre altres coses, això:

$http.Get(URLServidor)
.èxit(funció(dades, l'estat, capçaleres, config) {

var getLinksResponse = dades;

getLinksResponse.value.forEach(funció(theResult) {

// i així successivament i així escuma

Això estava treballant just bé en dos diferents SharePoint entorns en línia. No obstant això, Quan el meu col lega portat-lo a una instància de Cloudshare, ell estava aconseguint un HTTP 406 error (que era la primera vegada que mai arribava aquell, Així que... yay, Suposo que). Vam fer una mica de recerca i s'adonava que l'encapçalament "Accepta" era fora. Era molt feliç amb SharePoint en línia:

Acceptar: aplicació/json

Però l'exemple cloudshare (que és SP en prem, allotjat en un servidor virtual) volia el clàssic "odata = verbosa" afegit en, així:

Acceptar: aplicació/json;OData = depuraci ≤

D'arreglar allò, Hem afegit la capçalera com a tal:

var config = {capçaleres: {
"Accepta": ' aplicació/json;OData = depuraci ≤ "
}
};

$http.Get(URLServidor,config)
.èxit(funció(dades, l'estat, capçaleres, config) {

var getLinksResponse = dades;

getLinksResponse.value.forEach(funció(theResult) {

// i així successivament i així escuma

Que es va desfer de la 406, però també va canviar el format de la resposta. Es tractava més aviat... detallat. (Haha!) Calien canvis més i aquí està el resultat final:

var config = {capçaleres: {
"Accepta": ' aplicació/json;OData = depuraci ≤ "
}
};

$http.Get(URLServidor,config)
.èxit(funció(dades, l'estat, capçaleres, config) {

var getLinksResponse = dades;

getLinksResponse.d.Results.forEach(funció(theResult) {

// i així successivament i així escuma

Això només es va convertir en un 30 minut problema per a nosaltres, així ens va tenir sort a. Esperançadorament algú es troba aquesta útil.

</final>

How-to: Permeten múltiples peces angulars del SharePoint Web a la mateixa pàgina

Aquest bloc llocs descriu com es pot tenir múltiples Angular.js basat en elements web del SharePoint (fa referència a través d'un element web editor de continguts) a la mateixa pàgina. Vaig a trucar a un element web editor de continguts (CEWP) que fa referència a JavaScript construït utilitzant el marc Angular.js una "Part Angular Web."

Procés d'arrencada de angular és super fàcil i just sobre cada exemple que trobeu sobre la internets va alguna cosa com això:

<HTML ng-app = 'myApp'>

<bla /><bla /><bla />

</HTML>

Això es trenca, No obstant això, Si voleu permetre que múltiples CEWP representar parts múltiples webs angular en la mateixa pàgina. Angular es automàticament només arrencar contra la primera Directiva ng-app es troba – com a mínim a partir de la versió angular 1.3.6. La solució és força simple-arrencar manualment el seu codi en canvi. L'anterior ara canvia a alguna cosa com això:

<cos>
<d
Identificador IV =”bootstrapHere” ng-controlador =”myController com theController”>
<bla /><bla /><bla />
</Div>
</cos>

<escriptura src =”//Ajax.googleapis.com/Ajax/libs/angularjs/1.3.6/angular.js”></script>

<script>
angular.bootstrap(angular.element(document.getElementById(“bootstrapHere”)),['myApp']);
</script>

Bàsicament, enlloc de fer servir ng-app en l'element per fer el seu encebant, vostè donar una bufetada a un ID a aquest element. Llavors, utilitzar l'arrencada() mètode en angular propi per controlar la encebant procés al temps d'execució. He provat això amb tres parts diferents web Angular en la mateixa pàgina i funciona un encant.

</final>

undefinedSubscriure's al meu blog.

Follow me on Twitter http://www.twitter.com/pagalvin