--- ฉันรู้ว่าคำตอบนี้ไม่ได้สำหรับคำถามนี้ แต่ฉันต้องการคนที่อ่านคำถามนี้และต้องการจัดการบริการต่าง ๆ เช่นโรงงานเพื่อหลีกเลี่ยงปัญหาในการทำเช่นนี้ ----
สำหรับสิ่งนี้คุณจะต้องใช้บริการหรือโรงงาน
บริการเป็นแนวทางปฏิบัติที่ดีที่สุดในการแบ่งปันข้อมูลระหว่างตัวควบคุมที่ไม่ซ้อนกัน
หมายเหตุประกอบที่ดีมากในหัวข้อนี้เกี่ยวกับการแบ่งปันข้อมูลคือวิธีการประกาศวัตถุ ฉันโชคไม่ดีเพราะฉันตกหลุมพราง AngularJS ก่อนที่ฉันจะอ่านเกี่ยวกับเรื่องนี้และฉันก็ผิดหวังมาก ดังนั้นให้ฉันช่วยคุณหลีกเลี่ยงปัญหานี้
ฉันอ่านจาก "ng-book: หนังสือที่สมบูรณ์เกี่ยวกับ AngularJS" ที่ AngularJS รุ่น ng ที่สร้างขึ้นในตัวควบคุมเนื่องจากไม่มีข้อมูล!
องค์ประกอบ $ scope ควรสร้างเช่นนี้
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// best practice, always use a model
$scope.someModel = {
someValue: 'hello computer'
});
และไม่ชอบสิ่งนี้:
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// anti-pattern, bare value
$scope.someBareValue = 'hello computer';
};
});
นี่เป็นเพราะมันได้รับการแนะนำ (ปฏิบัติที่ดีที่สุด) สำหรับ DOM (เอกสาร html) เพื่อให้มีการโทรเป็น
<div ng-model="someModel.someValue"></div> //NOTICE THE DOT.
สิ่งนี้มีประโยชน์มากสำหรับตัวควบคุมที่ซ้อนกันถ้าคุณต้องการให้ตัวควบคุมลูกของคุณสามารถเปลี่ยนวัตถุจากตัวควบคุมหลัก ...
แต่ในกรณีของคุณคุณไม่ต้องการขอบเขตที่ซ้อนกัน แต่มีแง่มุมที่คล้ายกันในการรับวัตถุจากบริการไปยังตัวควบคุม
ให้บอกว่าคุณมี 'โรงงาน' บริการของคุณและในพื้นที่ส่งคืนมี objectA ที่มี objectB ที่มี objectC
หากจากคอนโทรลเลอร์คุณต้องการรับ objectC ในขอบเขตของคุณเป็นความผิดพลาดที่จะพูด
$scope.neededObjectInController = Factory.objectA.objectB.objectC;
มันใช้งานไม่ได้ ...
ใช้จุดเดียวแทน
$scope.neededObjectInController = Factory.ObjectA;
จากนั้นใน DOM คุณสามารถเรียก objectC จาก objectA นี่คือแนวปฏิบัติที่ดีที่สุดเกี่ยวกับโรงงานและที่สำคัญที่สุดจะช่วยหลีกเลี่ยงข้อผิดพลาดที่ไม่คาดคิดและไม่สามารถตรวจจับได้