คลังเก็บหมวดหมู่: แองกูลาร์

คำแนะนำที่ trouble-shooting สำหรับไดเรกทีฟของแองกูลาร์ (หรือ, เรียนรู้ที่จะรักยัติภังค์ทั่วอีกครั้ง)

มีคู่ของปพลิเคชันที่ทำ $http.get() โทรศัพท์และต้องสามารถแสดงข้อความข้อผิดพลาดรูปแบบอย่าง มีรายละเอียดข้อผิดพลาดที่น่าเกลียดที่ซ่อนอยู่, แต่สามารถเข้าถึง  โดยทั่ว, นี้:

image

แล้วถ้าผู้ใช้คลิกที่ข้อผิดพลาด, พวกเขาดูรายละเอียดเพิ่มเติม:

image

สิ่งที่ง่าย  เนื่องจากปรากฏแน่นอนเดียวกันอาจเกิดข้อผิดพลาดในหน้าจอการจัดการหน้าจอของผู้ใช้, มันเรียกว่าชัดเจนสำหรับคำสั่งแองกูลาร์แบบกำหนดเอง  ฉัน  พบ ชุดดีเด่น ของบทความ (http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-i-the-fundamentals) โดยมหาราช Dan Wahlin.  ตามคำแนะนำของเขา, ได้อย่างรวดเร็วสร้างการ <-สาร> ไดเรกทีฟ และย้ายระบบ squeegee แสดงข้อผิดพลาดของฉันขึ้น. ฉันวิ่งลงในบิตของปัญหาด้วยคำสั่งนี้ซับซ้อนมากขึ้น  อย่างมีความสุข, เรียงลำดับของโดยบังเอิญ, ผมได้บอก WebStorm (แก้ไขใช้วันนี้) ว่า ไฟล์ JS แฟ้มเป็นแองกูลาร์ และมันช่วยให้ฉันเข้าใจปัญหา  เป็นรหัสสำหรับคำสั่งตัวเอง:

angular.module("CDLApp").คำสั่ง("generalCdlErrorHandler", ฟังก์ชัน() {

เที่ยวกลับ {
จำกัด: "E",
แทน: จริง,

ขอบเขต: {
retrieveLastConfigurationError: "&"
},

แม่แบบ:
'<คลาส div = "เตือนเตือนอันตราย" บทบาท = "การแจ้งเตือน" เริ่ม ng = " doShowExpandedErrorDetails = true" ดู ng = "retrieveLastConfigurationError()">' +
' มีข้อผิดพลาด I/O หรือข้อผิดพลาดอื่น ๆ. นี้มักจะเกิดขึ้นได้เนื่องจากไม่พบแฟ้มข้อมูลการกำหนดค่า ' +
' พบ หรือแฟ้มการกำหนดค่าที่ประกอบด้วยข้อมูลที่ไม่ถูกต้อง (เช่นการอ้างอิงไลบรารีเอกสาร ' +
' ที่มีอยู่).' +
' <br />' +
' <div แสดง ng = "doShowExpandedErrorDetails">' +
' <การ href = "#" คลิก ng = " doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
'คลิกที่นี่เมื่อต้องการซ่อนรายละเอียด' +
' </การ>: ' +
' <br />' +
' <ก่อน>{{retrieveLastConfigurationError() | เจซัน}}</ก่อน>' +
' <br />' +
' </div>' +
' <div แสดง ng = "!doShowExpandedErrorDetails">' +
' <การ href = "#" คลิก ng = " doShowExpandedErrorDetails = ! doShowExpandedErrorDetails">' +
'คลิกที่นี่เพื่อขยายรายละเอียดข้อผิดพลาด' +
' </การ>' +
' </div>' +
'</div>'
};
});

โดยทั่ว, ฉันกำลังสร้างองค์ประกอบใหม่เรียกว่า "generalCdlErrorHandler"  ต้องการเข้าถึงฟังก์ชันเรียกว่า retrieveLastConfigurationError และที่จัดการในขอบเขตวัตถุ  ฉันคงไม่ได้เพียงใช้ขอบเขตของหลัก, แต่ที่รู้สึกขี้เกียจ  ถ้าใครคิดว่า ผมควรทำที่, ฉันชอบที่จะได้ยินเกี่ยวกับข้อคิดเห็น.

นี้ได้สะดวก, แต่ไม่ได้รับอะไร  ข้อผิดพลาดไม่มี popped ขึ้นในคอนโซล (ที่อย่างน้อย ฉันคงพลาด sx ทั้งหมดที่สร้างตามแบบ).  ผมก็ไม่ได้รับผลลัพธ์จากคำสั่ง  ฉันไป และเพิ่มการคงข้อความก่อนคำสั่งแสดง ng และ * ไม่ * ได้ที่. นี้ทำให้ฉันคิดว่า บางทีคำสั่งไม่อนุญาตให้สร้าง vars ใหม่เช่น "doShowExpandedErrorDetails" หรือมีการ "ng เริ่ม" นัยมี 

ฉันก็กลับเป็น HTML เมื่อต้องการดูถ้าผม ชนิดหนึ่งและเวลานี้ WebStorm ช่วยออก  ฉันได้ผ่านในฟังก์ชัน retrieveLastConfigurationError นี้:

<ทั่วไป-cdl-ข้อผิดพลาดจัดการ retrieveLastConfigurationError="CDLController.retrieveLastConfigurationError()">
</ทั่วไป-cdl-ข้อผิดพลาดจัดการ>

แต่มันจำเป็นนี้:

<ทั่วไป-cdl-ข้อผิดพลาดจัดการดึงสุดท้ายฟิกข้อผิดพลาด = "CDLController.retrieveLastConfigurationError()">
</ทั่วไป-cdl-ข้อผิดพลาดจัดการ>

WebStorm ฉลาดพอที่จะรู้ว่า มันได้ถูกเชื่อมต่อได้  ถ้ามันไม่ได้ให้คำแนะนำที่, ฉันจะอาจจะยังแก้ปัญหานี้ ยิ้ม.  เวลาสนุก!

นี่คือเคล็ดลับ: ไม่เพียงแต่ เป็นชื่อองค์ประกอบไดเรกทีฟเชื่อมต่อ, เพื่อให้ มีแอตทริบิวต์ใด ๆ ที่คุณเพิ่มเข้าไป  เมื่อเพิ่มการยัติภังค์, ทั้งหมดทำงานมากขึ้น  ของด่านกวดวิชาเกิดขึ้นจะ ใช้ชื่อย่อเดียว, ดังนั้นฉันไม่ได้ทำการเชื่อมต่อ.

หวังนี้ช่วยคน.

</สิ้นสุด>

undefinedสมัครสมาชิกไปยังบล็อกของฉัน.

ทำตามฉันใน Twitter ที่ http://www.twitter.com/pagalvin

HTTP 406 ข้อผิดพลาดเมื่อใช้ $http.get แองกูลาร์กับ SharePoint เหลือจุด

โปรแกรมปรับปรุง: Ndersson AD มาร์คชี้ให้เห็นชิ้นส่วนของข้อมูลนี้ดี: http://blogs.office.com/2014/08/13/json-light-support-rest-sharepoint-api-released/. ที่อธิบายมาก :).

ที่อาจเป็นเรื่องเลวร้ายที่สุดของบล็อกโพสต์เคย! Anyhoo.

โดยทั่วไปทำต้นแบบของฉันกับอินสแตนซ์ของ O365 ทั้งหมด. มีอินสแตนซ์ของฉันส่วนบุคคลเพื่อให้ไม่ต้องกังวลเกี่ยวกับผลกระทบต่อใคร. เป็นพังเพย – จำเมื่อเราเรียกมีรอบเครื่องเสมือนบนแล็ปท็อปของเรากับมอส – SQL Server, IIS, ไฮเปอร์-V เทียบกับการตัดสินใจ. VMWare? Anyhoo ...

ฉันได้พัฒนา app ใช้เชิงมุมในสภาพแวดล้อมนี้ไม่, ในสิ่งอื่น ๆ, นี้:

$http.get(serverUrl)
.ประสบความสำเร็จ(ฟังก์ชัน(ข้อมูล, สถานะ, หัวข้อ, การกำหนดค่า) {

var getLinksResponse =ข้อมูล;

getLinksResponse.value.forEach(ฟังก์ชัน(theResult) {

// และอื่น ๆ และอื่น ๆ froth

นี้ทำงานเพียงแค่ปรับในสองแตก SharePoint ออนไลน์. อย่างไรก็ตาม, เมื่อเพื่อนร่วมงานของฉันส่งมันไปที่อินสแตนซ์ Cloudshare, เขาได้รับการ HTTP 406 ข้อผิดพลาด (ซึ่งเป็นครั้งแรกที่เคยได้ที่หนึ่งหรือไม่, ดังนั้น...เย่, ฉันเดาเอา). เราได้บิตของการวิจัย และพบว่า หัวข้อ "ยอมรับ" ถูกปิด. SharePoint แบบออนไลน์ได้อย่างมีความสุขกับ:

ยอมรับ: แอพลิเคชัน/เจซัน

แต่อินสแตนซ์ cloudshare (ซึ่งเป็น SP ในเปรม, โฮสต์ในเซิร์ฟเวอร์เสมือน) ต้องคลาสสิค " odata = verbose " เพิ่มในเช่น:

ยอมรับ: แอพลิเคชัน/เจซัน;odata = verbose

การแก้ไขปัญหานั้น, เราได้เพิ่มหัวข้อเช่น:

กำหนดค่า var = {หัวข้อ: {
'ยอมรับ': ' แอพลิเคชัน/เจซัน;odata = verbose'
}
};

$http.get(serverUrl,การกำหนดค่า)
.ประสบความสำเร็จ(ฟังก์ชัน(ข้อมูล, สถานะ, หัวข้อ, การกำหนดค่า) {

var getLinksResponse =ข้อมูล;

getLinksResponse.value.forEach(ฟังก์ชัน(theResult) {

// และอื่น ๆ และอื่น ๆ froth

ที่ได้รับการกำจัด 406, แต่ยังเปลี่ยนแปลงรูปแบบของการตอบสนอง. ก็เพิ่มเติม... verbose. (ฮาฮา!) เปลี่ยนแปลงที่ถูกต้อง และนี่คือผลลัพธ์ขั้นสุดท้าย:

กำหนดค่า var = {หัวข้อ: {
'ยอมรับ': ' แอพลิเคชัน/เจซัน;odata = verbose'
}
};

$http.get(serverUrl,การกำหนดค่า)
.ประสบความสำเร็จ(ฟังก์ชัน(ข้อมูล, สถานะ, หัวข้อ, การกำหนดค่า) {

var getLinksResponse =ข้อมูล;

getLinksResponse.d.results.forEach(ฟังก์ชัน(theResult) {

// และอื่น ๆ และอื่น ๆ froth

นี้เปิดเข้าไปในตัว 30 ปัญหานาทีสำหรับเรา, ดังนั้น เรา lucked ออก. หวังว่าคนพบนี้มีประโยชน์.

</สิ้นสุด>

วิธี: เปิดใช้งานหลายแองกูลาร์ SharePoint Web Parts บนเพจเดียวกัน

บล็อกนี้โพสต์อธิบายวิธีคุณสามารถมีหลาย web part ของ SharePoint โดยใช้ Angular.js (อ้างอิงผ่าน web part ตัวแก้ไขเนื้อหา) ในหน้าเดียวกัน. ฉันกำลังเรียก web part ตัวแก้ไขเนื้อหา (CEWP) ที่อ้างอิงถึงจาวาสคริปต์ที่สร้างขึ้นโดยใช้กรอบ Angular.js เป็น "แองกูลาร์กัน"

เชิงมุมของกระบวนการเริ่มต้นระบบจะง่ายสุด และเพียงเกี่ยวกับทุกอย่างที่คุณพบ internets ไปเหมือน:

<html ng app = "myApp">

<บลา /><บลา /><บลา />

</html>

นี้แบ่ง, อย่างไรก็ตาม, ถ้าคุณต้องการเปิดใช้งานหลายแองกูลาร์ web parts บนเพจเดียวกันแสดงหลาย CEWP. เชิงมุมจะเท่าโดยอัตโนมัติ bootstrap กับคำสั่ง ng app แรกจะค้นหา – น้อย ณรุ่นแองกูลาร์ 1.3.6. การแก้ปัญหาง่าย – bootstrap ของแทนด้วยตนเอง. ข้างตอนนี้เปลี่ยนเป็นดังนี้:

<เนื้อความ>
<d
รหัส iv =”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, คุณตบรหัสลงในองค์ประกอบที่. แล้ว, ใช้ bootstrap การ() วิธีการในแองกูลาร์เพื่อควบคุม bootstrapping ประมวลผลในขณะทำงาน. ผมได้ทดสอบนี้ มี 3 ส่วนเว็บแองกูลาร์ที่แตกต่างกันในหน้าเดียวกัน และการทำงานคือ.

</สิ้นสุด>

undefinedสมัครสมาชิกไปยังบล็อกของฉัน.

ทำตามฉันใน Twitter ที่ http://www.twitter.com/pagalvin