Αρχεία κατηγοριών: Γωνιακή

Αντιμετώπισης προβλημάτων Συμβουλή για γωνιακή οδηγιών (Ή, Μαθαίνοντας να αγάπη ενωτικά, πάνω από όλα και πάλι)

Έχω ένα ζευγάρι των apps που κάνουν $http.get() κλήσεις και θα ήθελα να είναι σε θέση να δείξει μια ωραία διαμορφωμένο λάθος μήνυμα με άσχημο λάθος λεπτομερειών, αλλά είναι προσιτή.  Βασικά, αυτό:

image

Και τότε αν ο χρήστης κάνει κλικ σχετικά με το σφάλμα, βλέπουν περισσότερες πληροφορίες:

image

Απλά πράγματα.  Δεδομένου ότι το ακριβές ίδιο δυναμικό σφάλμα μπορεί να εμφανιστεί σε διοικητικές οθόνη, καθώς και την οθόνη του τελικού χρήστη, σαφώς ζητούσε μια προσαρμοσμένη γωνιακή οδηγίας.  ΜΟΥ  βρήκα αυτό εξαιρετική σειρά των άρθρων (http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-i-the-fundamentals) από το μεγάλο Dan Wahlin.  Ακολουθία των συμβουλών, Πολύ γρήγορα δημιούργησα ένα <γειά σου-κόσμος> οδηγία και κινημένος προς το μου πιο περίπλοκη ελαστικό μάκτρο οθόνη σφάλματος. Έτρεξα σε ένα κομμάτι του προβλήματος με την παρούσα πιο περίπλοκη οδηγία.  Ευτυχώς, είδος κατά τύχη, Είχα πει WebStorm (ο επεξεργαστής χρησιμοποιώ αυτές τις μέρες) ότι το JS αρχείο ήταν μια γωνιακή αρχείο και αυτό με βοήθησε να καταλάβω το θέμα.  Αυτός είναι ο κώδικας για την ίδια την οδηγία:

angular.Module("CDLApp").οδηγίας("generalCdlErrorHandler", συνάρτηση() {

επιστροφή {
περιορίζουν: "E",
αντικατάσταση: TRUE,

πεδίο εφαρμογής: {
retrieveLastConfigurationError: "&"
},

πρότυπο:
'<div class = "συναγερμού προειδοποίηση κινδύνου" ρόλο = "συναγερμού" ng-init = "doShowExpandedErrorDetails = true" ng-εμφάνιση = "retrieveLastConfigurationError()">' +
«Υπήρξε ένα σφάλμα εισόδου/εξόδου ή άλλα σφάλμα. Αυτό συμβαίνει συνήθως επειδή το αρχείο δεδομένων ρύθμισης παραμέτρων δεν θα μπορούσε να είναι» +
«βρέθηκαν ή το αρχείο ρυθμίσεων περιέχει ανακριβείς πληροφορίες (όπως η αναφορά σε μια βιβλιοθήκη εγγράφων» +
«που δεν υπάρχει).' +
' <br />' +
' <div ng-εμφάνιση = "doShowExpandedErrorDetails">' +
' <ένα href = "#" ng κλικ = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
«Κάντε κλικ εδώ για να αποκρύψετε λεπτομέρειες.» +
' </ένα>: ' +
' <br />' +
' <προ>{{retrieveLastConfigurationError() | JSON}}</προ>' +
' <br />' +
' </div>' +
' <div ng-εμφάνιση = "!doShowExpandedErrorDetails">' +
' <ένα href = "#" ng κλικ = "doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
«Κάντε κλικ εδώ για να επεκτείνει τις λεπτομέρειες σφάλματος.» +
' </ένα>' +
' </div>' +
'</div>'
};
});

Βασικά, Είμαι δημιουργώντας ένα νέο στοιχείο που ονομάζεται ένα "generalCdlErrorHandler".  Χρειάζεται πρόσβαση σε μια λειτουργία που ονομάζεται retrieveLastConfigurationError και που αντιμετωπίζεται στο αντικείμενο εφαρμογής.  Εγώ πιθανώς θα μπορούσε να χρησιμοποιήσει μόνο πεδίο εφαρμογής του γονέα, αλλά που αισθάνεται τεμπέλης.  Αν κάποιος νομίζει ότι θα έπρεπε να έχουν κάνει που, Θα ήθελα πολύ να ακούσω για αυτό στα σχόλια.

Αυτό was όλος εξαιρετικός, αλλά δεν ήταν να πάρει τίποτα.  Δεν λάθη που έσκασε επάνω στην κονσόλα (τουλάχιστον μια φορά έχω σταθερό όλα τα σφάλματα sx δημιούργησα κατά μήκος του τρόπου).  Απλά δεν είχα πάρει κάποια έξοδο από την οδηγία.  Πήγα και πρόσθεσε μερικά στατικό κείμενο πριν από την οδηγία ng-εμφάνιση και * έκανε * πάρει που. Αυτό με έκανε να σκεφτώ ότι ίσως η οδηγία δεν είχε το δικαίωμα να δημιουργήσετε νέα vars, όπως "doShowExpandedErrorDetails" σιωπηρά ή να έχουν μια "init-ng" εκεί. 

Πήγα πίσω στο HTML για να δείτε αν είχα έναν τύπο και αυτή τη φορά WebStorm με βοήθησε.  Είχε περάσει στη συνάρτηση retrieveLastConfigurationError όπως αυτό:

<retrieveLastConfigurationError="CDLController.retrieveLastConfigurationError γενικός-cdl-σφάλμα-χειριστή()">
</γενικό-cdl-σφάλμα-χειριστή>

Αλλά πραγματικά έπρεπε να είναι αυτό:

<γενικό-cdl-σφάλμα-χειριστή ανάκτηση-τελευταίο-διαμόρφωση-σφάλμα = "CDLController.retrieveLastConfigurationError()">
</γενικό-cdl-σφάλμα-χειριστή>

WebStorm ήταν αρκετά έξυπνος για να ξέρω ότι θα έπρεπε να χωριστεί.  Εάν δεν είχε παρασχεθεί η υπόδειξη, Εγώ θα πιθανώς ακόμα αντιμετώπιση προβλημάτων αυτό Χαμόγελο.  Χρόνοι διασκέδασης!

Το τέχνασμα είναι αυτό: όχι μόνο είναι το όνομα στοιχείου οδηγίας ενωτικό, έτσι είναι οποιαδήποτε χαρακτηριστικά που προσθέτετε σε αυτό.  Μόλις προστεθεί οι παύλες, όλα έλυσα σπουδαίος.  Το σεμινάριο του Dan συνέβη να χρησιμοποιήσετε μόνο ονόματα, έτσι δεν είχα κάνει τη σύνδεση.

Ελπίδα αυτό βοηθά κάποιος.

</Τέλος>

undefinedΕγγραφείτε στο blog μου.

Συνέχεια μου για Twitter σε http://www.twitter.com/pagalvin

HTTP 406 Σφάλμα κατά τη χρήση γωνιακή $http.get εναντίον του SharePoint υπόλοιπο τελικά σημεία

Ενημέρωση: Marc AD ndersson επεσήμανε αυτό το μεγάλο κομμάτι των πληροφοριών: http://Blogs.Office.com/2014/08/13/JSON-Light-support-REST-SharePoint-API-Released/. Που εξηγεί πολύ :).

Αυτό μπορεί να είναι η χειρότερη τίτλος του ένα blog post ποτέ! Anyhoo.

Συνήθως κάνω όλα μου πρωτοτυποποίηση ενάντια σε μια παρουσία O365. Έχω προσωπική παράδειγμα μου, έτσι ώστε δεν χρειάζεται να ανησυχείτε για το που κάποιος άλλος επηρεάζουν. Σαν παραλειπόμενα-Θυμηθείτε όταν καλούμε γίνεται γύρω από τις εικονικές μηχανές μας φορητούς υπολογιστές με το ΒΡΎΟ-SQL Server, IIS, ΑΡΧΈΣ vs Hyper-V. VMWare? Anyhoo...

Είχα αναπτύξει app χρησιμοποιώντας γωνιακή σε αυτό το περιβάλλον που κάνει, μεταξύ άλλων, αυτό:

$http.get(serverUrl)
.επιτυχία(συνάρτηση(δεδομένα, κατάσταση, κεφαλίδες, Config) {

var getLinksResponse = δεδομένων;

getLinksResponse.value.forEach(συνάρτηση(theResult) {

// και ούτω καθεξής και έτσι αφρό

Δούλευε μια χαρά σε δύο διαφορετικά SharePoint online περιβάλλοντα. Ωστόσο, όταν ο συνάδελφός μου μεταφέρει σε μια παρουσία Cloudshare, είχε πάρει μια HTTP 406 σφάλμα (που ήταν η πρώτη φορά που πήρα ποτέ ότι ένας, έτσι... yay, Υποθέτω). Κάναμε ένα κομμάτι της έρευνας και παρατήρησα ότι η επικεφαλίδα "Αποδοχή" ήταν μακριά. SharePoint online ήταν απόλυτα ευχαριστημένος με:

Δεχθεί: εφαρμογή/json

Αλλά η παρουσία του cloudshare (Ποιο είναι το SP στο prem, φιλοξενείται σε έναν εικονικό διακομιστή) ήθελε το κλασικό "odata = verbose" προστίθεται στο καθώς και:

Δεχθεί: εφαρμογή/json;OData = λεπτομερή

Να καθορίσει ότι, Έχουμε προσθέσει την κεφαλίδα, ως εκ τούτου:

var config = {κεφαλίδες: {
"Αποδοχή": «εφαρμογή/json;OData = λεπτομερή»
}
};

$http.get(serverUrl,Config)
.επιτυχία(συνάρτηση(δεδομένα, κατάσταση, κεφαλίδες, Config) {

var getLinksResponse = δεδομένων;

getLinksResponse.value.forEach(συνάρτηση(theResult) {

// και ούτω καθεξής και έτσι αφρό

Που πια απαλλαγεί από το 406, αλλά επίσης άλλαξε την μορφή της απάντησης. Ήταν περισσότερο... λεπτομερούς καταγραφής. (haha!) Περισσότερες αλλαγές που απαιτούνταν, και εδώ είναι το τελικό αποτέλεσμα:

var config = {κεφαλίδες: {
"Αποδοχή": «εφαρμογή/json;OData = λεπτομερή»
}
};

$http.get(serverUrl,Config)
.επιτυχία(συνάρτηση(δεδομένα, κατάσταση, κεφαλίδες, Config) {

var getLinksResponse = δεδομένων;

getLinksResponse.d.Results.forEach(συνάρτηση(theResult) {

// και ούτω καθεξής και έτσι αφρό

Αυτό μόνο να μετατραπεί σε ένα 30 λεπτό πρόβλημα για μας, έτσι εμείς lucked έξω. Ας ελπίσουμε ότι κάποιος βρίσκει χρήσιμες.

</Τέλος>

Πώς-να: Επιτρέπει πολλαπλά τμήματα γωνιακή του SharePoint στο Web στην ίδια σελίδα

Αυτό το blog θέσεις περιγράφει πώς μπορείτε να έχετε πολλαπλές Angular.js με βάση τμημάτων web του SharePoint (αναφορά μέσω ενός τμήματος web περιεχόμενο editor) στην ίδια σελίδα. Ζητώ ένα τμήμα web περιεχόμενο editor (CEWP) ότι οι αναφορές JavaScript που κατασκευάστηκε με τη χρήση του πλαισίου Angular.js ένα "γωνιακή τμήμα Web."

Διαδικασία εκκίνησης της γωνιακής πανεύκολο και ακριβώς για κάθε παράδειγμα μπορείτε να βρείτε για το Ίντερνετ πηγαίνει κάτι παρεμφερή:

<HTML ng-app = «myApp»>

<μπλα /><μπλα /><μπλα />

</HTML>

Αυτό διασπά, Ωστόσο, Εάν θέλετε να ενεργοποιήσετε του πολλαπλές CEWP που αντιπροσωπεύει πολλά τμήματα γωνιακή web στην ίδια σελίδα. Γωνιακή θα μόνο αυτόματα εκκίνηση κατά την πρώτη οδηγία ng-app αυτό βρίσκει – τουλάχιστον από την γωνιακή έκδοση 1.3.6. Η λύση είναι αρκετά απλή-να Μπουτστράπ με μη αυτόματο τρόπο τον κωδικό σας αντί. Τα παραπάνω τώρα αλλάζει σε κάτι σαν αυτό:

<οργανισμός>
<d
IV id =”bootstrapHere” ng-ελεγκτή =”myController ως theController”>
<μπλα /><μπλα /><μπλα />
</div>
</οργανισμός>

<σενάριο src =”//Ajax.googleapis.com/Ajax/libs/angularjs/1.3.6/angular.js”></σενάριο>

<σενάριο>
angular.bootstrap(angular.Element(document.getElementById(“bootstrapHere”)),[«myApp»]);
</σενάριο>

Βασικά, αντί να χρησιμοποιεί ng-app στο στοιχείο για να κάνει σας bootstrapping, ράπισμα σας ID επάνω σε αυτό το στοιχείο. Στη συνέχεια, Χρησιμοποιήστε τον κώδικα εκκίνησης() μέθοδος για την γωνιακή ίδια να ελέγξει το bootstrapping επεξεργασία κατά το χρόνο εκτέλεσης. Έχω δοκιμαστεί αυτό με τρία τμήματα διαφορετική γωνιακή web στην ίδια σελίδα και λειτουργεί ένα γοητεία.

</Τέλος>

undefinedΕγγραφείτε στο blog μου.

Συνέχεια μου για Twitter σε http://www.twitter.com/pagalvin