रिपोर्ट डिजाइनर
विज़ुअल रिपोर्ट और दस्तावेज़ लेआउट बनाएं जो आपका बैकएंड रेंडर समय पर डेटा से भर जाता है।
पुनः प्रयोज्य ब्लॉक, घटकों, टेम्पलेट्स, उत्तरदायी संपादन और अपने स्वयं के प्रकाशन वर्कफ़्लो के साथ Angular के लिए एक विज़ुअल ड्रैग-एंड-ड्रॉप पेज बिल्डर बनाएं।
26k+
GitHub सितारे
1.4M+
npm डाउनलोड/माह
100+
GJS.Market पर प्लगइन्स
$0
लाइसेंस शुल्क, हमेशा
तीन वास्तविक GrapesJS संपादक, केवल तभी लोड होते हैं जब आप उनसे पूछते हैं। इनमें से कोई भी डेमो Angular एप्लिकेशन नहीं है - और यही बात है। GrapesJS एक कंटेनर तत्व में प्रस्तुत होता है जो इसके स्वामित्व में है, इसलिए संपादन सतह वही दिखती है और व्यवहार करती है जो भी ढांचा इसके चारों ओर पृष्ठ को होस्ट करता है।
स्टॉक संपादक: कैनवास, ब्लॉक, लेयर ट्री, स्टाइल मैनेजर और डिवाइस स्विचर। यह वह नींव है जिसे आप अपना खुद का एक ब्लॉक जोड़ने से पहले शुरू करते हैं।
grapesjs.com से एक लाइव तृतीय-पक्ष संपादक लोड करता है।
पेज बिल्डर बनाने में कुछ Angular घटकों से कहीं अधिक समय लगता है। एक उत्पादन-तैयार विज़ुअल एडिटर को इनमें से हर एक की आवश्यकता होती है, इससे पहले कि कोई भी इसके साथ एक पेज शिप कर सके:
GrapesJS उस सूची के अधिकांश के लिए दृश्य संपादन आधार प्रदान करता है, इसलिए आपका Angular एप्लिकेशन इसके बजाय आपके उत्पाद और आपके व्यावसायिक तर्क पर अपना बजट खर्च कर सकता है। अंतिम दो - जहां परियोजनाएं संग्रहीत की जाती हैं और पृष्ठ कैसे लाइव होते हैं - आपके बने रहें, क्योंकि वे ऐसे हिस्से हैं जिन्हें आपके बुनियादी ढांचे से मेल खाना है।
GrapesJS कोर BSD-3-Clause लाइसेंस, संस्करण 0.23.6 के तहत खुला स्रोत है, जिसमें किसी भी पैमाने पर कोई लाइसेंस शुल्क नहीं है।
अन्वेषण करें GrapesJSएक ही इंजन, छह अलग-अलग उत्पादों की ओर इशारा करता है। उनके बीच जो परिवर्तन होता है वह है आपका सामग्री मॉडल, आपके ब्लॉक और आपका प्रकाशन लक्ष्य - संपादक नहीं।
सामग्री टीमों को एक फॉर्म भरने और लेआउट के जीवित रहने की उम्मीद करने के बजाय अपने CMS के अंदर पृष्ठों को दृश्य रूप से संपादित करने दें।
हेडलेस CMS संपादकअभियान पृष्ठों के लिए मार्केटिंग को एक विज़ुअल संपादक दें, ताकि एक नया लैंडिंग पृष्ठ डेवलपर टिकट बनना बंद हो जाए.
लैंडिंग पेज बिल्डरउपयोगकर्ताओं को अपने स्वयं के फ़ील्ड घटकों से कस्टम प्रपत्रों को इकट्ठा करने दें, सत्यापन नियमों के साथ आपका एप्लिकेशन पहले से ही समझता है।
प्रपत्र घटकटेबल-आधारित मार्कअप ईमेल क्लाइंट के साथ दृश्य रूप से ईमेल टेम्पलेट बनाएं और प्रबंधित करें।
ईमेल टेम्पलेट बिल्डरविज़ुअल रिपोर्ट और दस्तावेज़ लेआउट बनाएं जो आपका बैकएंड रेंडर समय पर डेटा से भर जाता है।
प्रत्येक ग्राहक को अपना स्वयं का ब्रांडेड संपादन वातावरण दें जो आपके उत्पाद के हिस्से की तरह दिखता है, न कि बोल्ट-ऑन टूल का।
व्हाइट-लेबल पेज बिल्डरसंपादक आपके एप्लिकेशन के अंदर एक मार्ग है, इसके लिए प्रतिस्थापन नहीं। संपादन परत के ऊपर सब कुछ ठीक वहीं रहता है जहां Angular टीमें पहले से ही इसे रखती हैं।
वह सब कुछ जो आपके उत्पाद को आपका बनाता है, अपरिवर्तित है।
एक आलसी-भारित मार्ग, एक घटक जो कंटेनर का मालिक है, और एक सेवा जो संपादक उदाहरण का मालिक है।
दृश्य संपादन इंजन, आपके घटक द्वारा प्रदान किए जाने वाले कंटेनर के अंदर चल रहा है।
जहां प्रोजेक्ट डेटा, अपलोड और प्रकाशित आउटपुट वास्तव में रहते हैं।
Angular आपके एप्लिकेशन का मालिक है। GrapesJS दृश्य संपादन परत को शक्ति प्रदान करता है।
शीर्ष या निचले स्तर में कुछ भी संपादक द्वारा प्रदान नहीं किया जाता है। वह सीमा वह है जो एकीकरण को बाद में हटाने के लिए पर्याप्त उथली रखती है - संपादक कभी भी वह चीज नहीं बन जाता है जिसके आसपास आपका उत्पाद बनाया गया है।
Angular एकीकरण मार्गदर्शिका पढ़ेंआठ उप-प्रणालियाँ जो इंजन के साथ आती हैं। प्रत्येक एक API है जिसे आप कॉन्फ़िगर करते हैं, न कि एक ब्लैक बॉक्स जिसे आप स्वीकार करते हैं।
उपयोगकर्ता घटकों को कैनवास पर खींचकर, उन्हें पुनः व्यवस्थित करके और जहां आप इसकी अनुमति देते हैं वहां उन्हें नेस्ट करके पृष्ठ बनाते हैं।
पुनः प्रयोज्य घटक प्रकारों को उनके स्वयं के traits के साथ परिभाषित करें, उनके अंदर क्या गिराया जा सकता है, और अपने स्वयं के व्यवहार के बारे में नियम।
उपयोगकर्ताओं को कच्चे HTML तत्वों की सूची के बजाय पैलेट में पूर्वनिर्धारित अनुभाग और लेआउट दें।
उपयोगकर्ताओं को आपके द्वारा चुने गए और बाधित संपत्ति पैनलों के माध्यम से टाइपोग्राफी, रिक्ति, रंग और लेआउट को अनुकूलित करने दें।
किसी पृष्ठ का पूर्वावलोकन करें और उसे रीस्टाइल करें, किसी निश्चित सेट के बजाय आपके द्वारा निर्धारित डिवाइस चौड़ाई का उपयोग करके.
एक परिसंपत्ति प्रबंधक के माध्यम से छवियों और अन्य परियोजना परिसंपत्तियों को प्रबंधित करें जिसे आप अपने स्वयं के भंडारण पर इंगित कर सकते हैं।
समाप्त पृष्ठों को पुनः प्रयोज्य प्रारंभिक बिंदुओं के रूप में सहेजें ताकि अगला पृष्ठ खाली के अलावा कहीं और शुरू हो।
संपादक से HTML और CSS साफ़ करें, या प्रोजेक्ट JSON पढ़ें और इसे वैसे भी प्रस्तुत करें जैसा आपका एप्लिकेशन पसंद करता है।
जानबूझकर इस सूची में क्या नहीं है: होस्टिंग, एक CMS, एक अनुमति मॉडल और प्रकाशन बुनियादी ढांचा। वे आपके एप्लिकेशन से संबंधित हैं, और नीचे दिए गए अनुभाग बताते हैं कि वे कैसे जुड़ते हैं।
एक सामान्य वेबसाइट बिल्डर शायद ही कभी वह उत्पाद होता है जो कोई चाहता है। संपादक की हर परत को किसी ऐसी चीज़ से बदला जा सकता है जो आपके एप्लिकेशन से मेल खाती हो।
प्रत्येक परत संपादक को आपके सामग्री मॉडल की ओर सीमित करती है। अंतिम तक, उपयोगकर्ता आपके उत्पाद की रचना कर रहे हैं - वेबसाइट नहीं।
ऐसे घटक प्रकारों को पंजीकृत करें जो आपके स्वयं के डोमेन ऑब्जेक्ट्स को प्रतिबिंबित करते हैं, केवल traits को उजागर करते हैं जिस पर आपका बैकएंड कार्य कर सकता है, और उन्हें अपनी श्रेणियों के तहत ब्लॉक पैलेट में रखें। उपयोगकर्ता तब एक मूल्य निर्धारण तालिका या एक उत्पाद ग्रिड के साथ काम करते हैं जिसे आपका API पहले से ही समझता है, न कि मनमाने मार्कअप के साथ जिसे आपको बाद में पार्स करना होगा।
// Your content model, not a generic website element.
editor.Components.addType('pricing-table', {
isComponent: (el) => el.dataset?.gjsType === 'pricing-table',
model: {
defaults: {
tagName: 'section',
droppable: false,
traits: ['plan', 'currency', 'billingPeriod'],
},
},
});
editor.Blocks.add('pricing-table', {
label: 'Pricing',
category: 'Your design system',
content: { type: 'pricing-table' },
});एक घटक प्रकार और ब्लॉक जो इसे सम्मिलित करता है। विशेषता नाम वे फ़ील्ड बन जाते हैं जिन्हें आपका बैकएंड पढ़ता है।
एक संपादक जो लोग उपयोग करते हैं और जिसे वे छोड़ देते हैं, के बीच का अंतर आमतौर पर पहले दिन पैलेट में होता है।
आपके ब्लॉक
उपयोगकर्ताओं को एक खाली कैनवास से शुरू न करें।
पुनः प्रयोज्य ब्लॉक और टेम्पलेट बनाएं जो आपके एप्लिकेशन के डिज़ाइन सिस्टम से मेल खाते हों, ताकि उपयोगकर्ता द्वारा बनाया गया प्रत्येक पृष्ठ पहले से ही ऑन-ब्रांड हो और पहले से ही उत्तरदायी हो। GJS.Market शिप ब्लॉक सेट और टेम्पलेट मैनेजर जिन्हें आप स्क्रैच से पहले पचास को लिखने के बजाय इंस्टॉल कर सकते हैं।
ब्लॉक और टेम्पलेट ब्राउज़ करेंGrapesJS एक प्रोजेक्ट को JSON पर क्रमबद्ध करता है और इसे स्टोरेज एडाप्टर को सौंप देता है। वह एडाप्टर जो करता है वह पूरी तरह से आपका है।
संपादक आपके डेटाबेस से कभी बात नहीं करता है। यह आपके द्वारा पंजीकृत एडॉप्टर को कॉल करता है, और एडेप्टर आपके पास पहले से मौजूद API को कॉल करता है।
editor.Storage.add('angular-backend', {
async load() {
return firstValueFrom(this.http.get(`/api/pages/${this.pageId}`));
},
async store(data) {
return firstValueFrom(this.http.put(`/api/pages/${this.pageId}`, data));
},
});
grapesjs.init({
container,
storageManager: { type: 'angular-backend', autosave: true, stepsBeforeSave: 5 },
});एक कस्टम स्टोरेज एडाप्टर जो आपके API से जुड़ा हुआ है। यहां कुछ भी GJS.Market के लिए विशिष्ट नहीं है - यह संपादक का प्रलेखित भंडारण अनुबंध है।
घटक, शैलियाँ, पृष्ठ और परिसंपत्तियाँ किसी JSON दस्तावेज़ के लिए क्रमबद्ध होती हैं, जिसे आप किसी भी स्तंभ या संग्रह में संग्रहीत कर सकते हैं.
भंडारण प्रबंधक केवल एक स्पष्ट कार्रवाई के बजाय परिवर्तनों की एक कॉन्फ़िगर करने योग्य संख्या के बाद सहेज सकता है।
एक कस्टम एडाप्टर और रूट लोड पंजीकृत करें और अपने स्वयं के इंटरसेप्टर और प्रमाणीकरण हेडर के साथ Angular के HttpClient के माध्यम से स्टोर करें।
क्योंकि प्रत्येक सेव एक दस्तावेज़ है, इतिहास रखना एक बैकएंड निर्णय है - संपादक को यह जानने की आवश्यकता नहीं है कि यह हुआ था।
प्रोजेक्ट JSON के साथ रेंडर किए गए मार्कअप को निर्यात करें जब आपके डिलीवरी पथ को री-रेंडर के बजाय स्थिर आउटपुट की आवश्यकता होती है।
एक प्रकाशित पृष्ठ अपने स्वयं के जीवनचक्र के साथ एक अलग रिकॉर्ड है। इसे उस मसौदे से अलग रखें जिसे संपादक लिखता है।
आप नियंत्रित करते हैं कि प्रोजेक्ट डेटा कहाँ संग्रहीत किया जाता है।
अलग-अलग विफलता मोड के साथ लेखन और प्रकाशन अलग-अलग समस्याएं हैं। संपादक पहले वाले को हल करता है; दूसरा आपके बुनियादी ढांचे में रहता है, जहां आपकी कैशिंग, अनुमतियां और रोलबैक पहले से ही रहते हैं।
प्रकाशित आउटपुट कहां जा सकता है
आउटपुट को वापस उस सामग्री प्रणाली में लिखें जो आपका संगठन पहले से चलाता है।
प्रोजेक्ट या रेंडर किए गए मार्कअप को किसी ऐसे एंडपॉइंट पर पोस्ट करें जो सत्यापन और अनुमतियों का मालिक हो.
प्रकाशन समय पर पृष्ठों को फ़ाइलों में प्रस्तुत करें ताकि लाइव पृष्ठ संपादक के रनटाइम में से कोई भी न हो।
आउटपुट को उसी पथ के माध्यम से स्टोर, रूपांतरित और परोसें जो आपका एप्लिकेशन पहले से ही अपने पृष्ठों की सेवा के लिए उपयोग करता है।
प्रकाशित संपत्तियों और मार्कअप को किनारे पर धकेलें, कैश अमान्यता के साथ आप नियंत्रित करते हैं।
अपने मौजूदा बिल्ड को ट्रिगर करें या प्रकाशन क्रिया से पाइपलाइन परिनियोजित करें.
GrapesJS संलेखन को संभालता है। आपका बुनियादी ढांचा प्रकाशन को संभाल सकता है।
आपके Angular एप्लिकेशन की एक तैनाती, एक संपादक, और इसमें प्रत्येक ग्राहक के लिए पृष्ठों की एक अलग दुनिया।
Angular SaaS
Org A
Org B
Org C
इनमें से कोई भी GrapesJS सुविधा नहीं है। संपादक के पास किरायेदार की कोई अवधारणा नहीं है: यह उस परियोजना को लोड करता है जो इसे दिया गया है और उस परियोजना को संग्रहीत करता है जिसे इसे वापस सौंपा जाता है। किरायेदारी एक ऐसी चीज है जिसे आपका Angular एप्लिकेशन और आपका बैकएंड लागू करता है - यही कारण है कि यह आपके पास पहले से मौजूद अलगाव मॉडल से मेल खा सकता है।
एक्सप्लोर SaaS पेज बिल्डरसंपादक के बारे में कुछ भी संपादक की तरह नहीं दिखना चाहिए। उपयोगकर्ता द्वारा छूई जाने वाली प्रत्येक सतह कॉन्फ़िगर करने योग्य, बदली जा सकने वाली या हटाने योग्य है।
एक विज़ुअल एडिटर को अपने Angular उत्पाद के मूल भाग में बदलें।
एक्सप्लोर व्हाइट-लेबल पेज बिल्डरलघु संस्करण, चार चरणों में। संपूर्ण मार्गदर्शिका - जीवनचक्र विवरण, रैपर, ज़ोनलेस परिवर्तन का पता लगाना, उत्पादन संबंधी चिंताएँ - अपने स्वयं के पृष्ठ पर रहती हैं और इससे कहीं आगे जाती हैं।
संपादक को अपने आवेदन में जोड़ें। यह एक सादा npm पैकेज है जिसमें कोई Angular-विशिष्ट बिल्ड चरण नहीं है।
संपादक इंस्टेंस को इंजेक्टेबल सेवा में रखें ताकि घटक पतला रहे और इंस्टेंस को साझा करना, मजाक उड़ाना और फाड़ना आसान हो।
संपादक बनाने से पहले कंटेनर तत्व DOM में होना चाहिए, क्योंकि GrapesJS इसे तुरंत मापता है।
मार्ग छोड़ने पर नष्ट करें को कॉल करें। इसके बिना संपादक अपने DOM श्रोताओं को रखता है और अगला नेविगेशन एक उदाहरण लीक करता है।
npm install grapesjsएक निर्भरता। कोई Angular-विशिष्ट आवरण की आवश्यकता नहीं है।
import { Injectable, NgZone, inject } from '@angular/core';
import grapesjs, { type Editor } from 'grapesjs';
@Injectable({ providedIn: 'root' })
export class PageBuilderService {
private readonly zone = inject(NgZone);
private editor?: Editor;
create(container: HTMLElement): Editor {
// GrapesJS binds its own DOM listeners to the canvas. Creating it outside
// Angular keeps every drag frame from scheduling change detection.
this.editor = this.zone.runOutsideAngular(() =>
grapesjs.init({
container,
height: '100%',
fromElement: false,
storageManager: false,
})
);
return this.editor;
}
destroy(): void {
this.editor?.destroy();
this.editor = undefined;
}
}सेवा उदाहरण और उसके जीवनकाल का मालिक है; घटक केवल कंटेनर का मालिक है।
import {
AfterViewInit,
Component,
ElementRef,
OnDestroy,
inject,
viewChild,
} from '@angular/core';
import { PageBuilderService } from './page-builder.service';
@Component({
selector: 'app-page-builder',
standalone: true,
template: '<div #canvas class="builder"></div>',
styles: '.builder { height: 100vh; }',
})
export class PageBuilderComponent implements AfterViewInit, OnDestroy {
private readonly builder = inject(PageBuilderService);
private readonly canvas = viewChild.required<ElementRef<HTMLElement>>('canvas');
ngAfterViewInit(): void {
// The container has to be in the DOM first: GrapesJS measures it on init.
this.builder.create(this.canvas().nativeElement);
}
ngOnDestroy(): void {
// Without this the editor keeps its listeners after the route changes.
this.builder.destroy();
}
}दृश्य मौजूद होने के बाद बनाएं, जब वह चला जाए तो नष्ट कर दें। वह जोड़ी अधिकांश एकीकरण है।
संपूर्ण Angular एकीकरण गाइड की आवश्यकता है?
रैपर विकल्प, ज़ोनलेस परिवर्तन का पता लगाना, आलसी-लोडेड संपादक मार्ग, परिसंपत्ति हैंडलिंग और उत्पादन चेकलिस्ट को अंत से अंत तक कवर किया जाता है।
Angular एकीकरण मार्गदर्शिका पढ़ेंGrapesJS अपनी स्वयं की घटनाओं का उत्सर्जन करता है, और वे घटनाएँ Angular से नहीं आती हैं। दोनों का समन्वय करना कुछ पंक्तियाँ हैं, लेकिन इसे छोड़ने से दो बग पैदा होते हैं जो हर एकीकरण पहले हिट होता है।
editor.on('storage:end:store', () => {
// Editor events fire outside Angular because the editor was created there.
// Re-enter the zone before touching state the template renders.
this.zone.run(() => this.lastSavedAt.set(new Date()));
});एक हैंडलर में ज़ोन को फिर से दर्ज करना जो रेंडर की गई स्थिति को अपडेट करता है।
runOutsideAngular के अंदर संपादक बनाएं ताकि कैनवास इंटरैक्शन प्रत्येक फ्रेम पर परिवर्तन का पता लगाने को शेड्यूल न करे, फिर मुट्ठी भर ईवेंट हैंडलर में ज़ोन को फिर से दर्ज करें जो वास्तव में आपके टेम्पलेट रेंडर को अपडेट करते हैं। एक ज़ोनलेस एप्लिकेशन पर एक ही हैंडलर इसके बजाय सिग्नल अपडेट करते हैं, और बाहरी आवरण की अब आवश्यकता नहीं है।
Angular जीवनचक्र और क्षेत्रों पर अधिकGrapesJS को एक ब्राउज़र DOM की आवश्यकता है। Angular SSR या Angular यूनिवर्सल के तहत इसका मतलब है कि संपादक केवल ब्राउज़र में बनाया गया है - इसके चारों ओर का मार्ग अभी भी सर्वर पर सामान्य रूप से प्रस्तुत करता है।
isPlatformBrowser के साथ आरंभीकरण की रक्षा करें और सर्वर पर जल्दी वापस आ जाएं। शेष मार्ग अपरिवर्तित है: गार्ड, रिज़ॉल्वर और आसपास के मार्कअप अपने सर्वर-रेंडर व्यवहार को बनाए रखते हैं, और केवल संपादक कंटेनर खाली आता है।
import { PLATFORM_ID, inject } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
export class PageBuilderComponent implements AfterViewInit {
private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
ngAfterViewInit(): void {
// There is no DOM on the server and GrapesJS needs one, so the editor is
// created in the browser only. The rest of the route still renders on the
// server as usual.
if (!this.isBrowser) return;
this.builder.create(this.canvas().nativeElement);
}
}संपूर्ण SSR समायोजन: संपादक बनने से पहले एक प्लेटफ़ॉर्म की जाँच करें।
एकीकरण साधारण Angular कोड है, जो इसके बारे में कहने लायक मुख्य बात है।
संपादक अपनी स्वयं की प्रकार की परिभाषाएँ शिप करता है, इसलिए इंस्टेंस, उसका कॉन्फ़िगरेशन और उसके ईवेंट कॉल साइट पर टाइप किए जाते हैं।
निर्माण और टियरडाउन ngAfterViewInit और ngOnDestroy - घटक वृक्ष के बाहर कोई मैन्युअल बूटस्ट्रैपिंग नहीं।
एकीकरण में कुछ भी रनटाइम टेम्पलेट संकलन पर निर्भर नहीं करता है, इसलिए संपादक मार्ग किसी भी अन्य आलसी-लोड किए गए मार्ग की तरह बनता है।
जहां SSR चलन में है, केवल संपादक निर्माण ब्राउज़र-संरक्षित है; बाकी घटक सामान्य रूप से संकलित और प्रस्तुत करता है।
विज़ुअल एडिटर के प्रयोग करने योग्य होने से पहले नीचे दी गई प्रत्येक क्षमता का अस्तित्व होना चाहिए। एकमात्र सवाल यह है कि आप उनमें से कौन सा स्वयं लिखते हैं।
| योग्यता | खरोंच से | GrapesJS |
|---|---|---|
| दृश्य कैनवास | निर्माण | शामिल |
| खींचें और छोड़ें | निर्माण | शामिल |
| अवयव | निर्माण | शामिल |
| ब्लॉक | निर्माण | एक्स्टेंसिबल |
| बिछाना | निर्माण | शामिल |
| उत्तरदायी संपादन | निर्माण | शामिल |
| संपत्ति | निर्माण | एक्स्टेंसिबल |
| टेम्पलेट्स | निर्माण | एक्स्टेंसिबल |
| भंडार | निर्माण | एक्स्टेंसिबल |
| निर्यातित माल | निर्माण | एक्स्टेंसिबल |
| Angular एकीकरण | निर्माण | एकीकृत करें |
"एक्स्टेंसिबल" का अर्थ है कि सबसिस्टम मौजूद है और इसमें एक प्रलेखित API है जिसे आप अपने स्वयं के कार्यान्वयन पर इंगित करते हैं - ऐसा नहीं है कि यह आपके बैकएंड पर पूर्व-वायर्ड आता है। GrapesJS 0.23.6 पर 2026-09-03 के खिलाफ सत्यापित।
अपना Angular उत्पाद बनाएं। दृश्य संपादन इंजन का पुनर्निर्माण न करें।
एक काम करने वाला बिल्डर जिस स्टैक के साथ समाप्त होता है। GrapesJS पहली परत को कवर करता है; बाकी इकट्ठा करने, स्थापित करने या खरीदने के लिए आपका है।
इंजन आपको संपादन सतह देता है। एक विशिष्ट उत्पाद के ऊपर जो कुछ भी चाहिए - ब्लॉक पैलेट, टेम्पलेट सिस्टम, समृद्ध पाठ, दृढ़ता, उत्पादन के लिए निकास पथ - वह जगह है जहां GJS.Market प्लगइन्स आते हैं। नीचे दी गई प्रत्येक सूची एक वास्तविक उत्पाद है, जिसकी कीमत दिखाए गए अनुसार है।
समस्या: एक नए संपादक के पास एक खाली पैलेट होता है, और कोई भी नंगे <div> से एक पृष्ठ नहीं बनाता है।
इस श्रेणी को ब्राउज़ करेंप्रारंभिक पैलेट: कॉलम, टेक्स्ट, चित्र, लिंक और वीडियो, इसलिए कैनवास पहले दिन प्रयोग करने योग्य है।
Tailwind-आधारित ब्लॉक, इसलिए उपयोगकर्ता आपके द्वारा पहले से उपयोग किए जाने वाले उपयोगिता डिज़ाइन सिस्टम से मेल खाने वाले पृष्ठ बनाते हैं।
Bootstrap उन टीमों के लिए 5 ग्रिड और घटक ब्लॉक जिनकी डिज़ाइन प्रणाली पहले से ही Bootstrap है।
एक हेडर को एक बार संपादित किया गया और प्रतियों को अलग करने के बजाय हर पृष्ठ पर पुनः उपयोग किया गया।
समस्या: उपयोगकर्ताओं को शुरू करने के लिए कहीं न कहीं की आवश्यकता होती है, और बहु-पृष्ठ परियोजनाओं को एक प्रबंधक की आवश्यकता होती है जिसे संपादक शिप नहीं करता है।
इस श्रेणी को ब्राउज़ करेंसंपादक के अंदर एक टेम्पलेट लाइब्रेरी, इसलिए एक नया पृष्ठ एक समाप्त लेआउट से शुरू होता है।
एक पृष्ठ सूची के साथ बहु-पृष्ठ परियोजनाएं, इसलिए एक बिल्डर एक एकल दस्तावेज़ के बजाय एक साइट को संभालता है।
उपयोगकर्ताओं को अपने स्वयं के अनुभागों को पुनः प्रयोज्य ब्लॉक के रूप में सहेजने देता है - आपका पैलेट आपके द्वारा कुछ भी शिपिंग किए बिना बढ़ता है।
संपादक के चारों ओर प्रोजेक्ट ब्राउज़िंग और प्रबंधन, एक समय में एक से अधिक चीजों पर काम करने वाली टीमों के लिए।
समस्या: हर कोई मानता है कि समृद्ध पाठ और काम करने वाले रूप अंतर्निहित हैं। न तो बुनियादी बातों से परे है।
इस श्रेणी को ब्राउज़ करेंइनपुट, चयन और सत्यापन traits के साथ घटकों को बनाएं, जो आपके समापन बिंदुओं पर सबमिट करने के लिए तैयार हैं।
उन टीमों के लिए अंतर्निहित समृद्ध टेक्स्ट एडिटर को CKEditor 5 से बदल देता है जिन्हें गंभीर टेक्स्ट एडिटिंग की आवश्यकता होती है।
वही, TinyMCE 6 के साथ - पारंपरिक CMS से आने वाले किसी भी व्यक्ति से परिचित है।
तृतीय-पक्ष निर्भरता जोड़े बिना डिफ़ॉल्ट रिच टेक्स्ट एडिटर पर अतिरिक्त स्वरूपण नियंत्रण।
समस्या: प्रोटोटाइप जो कभी भी कुछ भी नहीं बना रहा, वह वह है जिसे कभी शिप नहीं किया गया।
इस श्रेणी को ब्राउज़ करेंब्राउज़र में स्थानीय दृढ़ता: ड्राफ्ट, ऑफ़लाइन संपादन और पूर्वावलोकन वातावरण के लिए उपयोगी।
परियोजनाओं को Directus में संग्रहीत करता है, यदि हेडलेस बैकएंड पहले से ही आपके स्टैक का हिस्सा है।
ZIP, HTML और संपत्ति के CSS के रूप में एक पृष्ठ डाउनलोड करता है - सबसे सरल संभव निर्यात पथ।
सीधे Netlify पर प्रकाशित करता है, उन उत्पादों के लिए जिनका आउटपुट एक होस्ट की गई स्थिर साइट है।
या किसी श्रेणी से शुरू करें
दोनों कॉलम एक काम करने वाले बिल्डर के साथ समाप्त होते हैं। वे इस बात में भिन्न हैं कि आप अभी भी दो वर्षों में इसका कितना रखरखाव कर रहे हैं।
GrapesJS दृश्य संपादन नींव प्रदान करता है। GJS.Market प्लगइन्स आपको आंतरिक रूप से हर सुविधा का निर्माण करने के बजाय अतिरिक्त क्षमताओं के साथ अपने बिल्डर का विस्तार करने देते हैं।
पांच आवर्ती आकार, और उनमें से प्रत्येक वास्तव में एक दृश्य संपादक के साथ क्या खरीद रहा है।
किसी ऐसे उत्पाद में विज़ुअल संपादन जोड़ें जिसके ग्राहक वर्तमान में उनके लिए पृष्ठ बदलने के लिए समर्थन मांगते हैं.
CMS को सौंपने के बजाय प्रति ग्राहक एक कस्टम संपादन वातावरण बनाएं जो कोई नहीं चाहता था।
स्क्रैच से एक संपादक इंजन लिखने के लिए एक रोडमैप वर्ष खर्च किए बिना दृश्य संपादन जोड़ें।
विपणक को प्रत्येक शीर्षक के लिए लूप में डेवलपर के बिना पृष्ठ बनाने और बदलने दें।
नियंत्रित आंतरिक संपादन वर्कफ़्लो बनाएं, जहां जो संपादित किया जा सकता है वह उतना ही महत्वपूर्ण है जितना कि बनाया जा सकता है।
एक दृश्य संपादक को शिप करने के चार तरीके। वे ओवरलैप करते हैं, लेकिन वे अलग-अलग बाधाओं से शुरू करते हैं - और गलत को चुनना देर से दिखाई देता है।
अपने स्वयं के Angular एप्लिकेशन के अंदर एक विज़ुअल एडिटर बनाएं, जो आपकी टीम के स्वामित्व में है और आपके कंटेंट मॉडल द्वारा आकार दिया गया है। वह यह पेज है।
संपादक को एक ऐसे एप्लिकेशन में एम्बेड करें जो पहले से मौजूद है, दोनों के बीच न्यूनतम सतह क्षेत्र के साथ।
एम्बेड करने योग्य पेज बिल्डरकिरायेदारी, योजनाओं और प्रति-ग्राहक प्रकाशन के साथ एक ग्राहक-सामना करने वाला दृश्य संपादन उत्पाद बनाएं।
SaaS पेज बिल्डरसंपादक को अपने स्वयं के उत्पाद की तरह दिखें और व्यवहार करें, उसके पैनलों में शब्दावली तक।
व्हाइट-लेबल पेज बिल्डरएक ही चीज़ को दूसरे ढांचे पर बना रहे हैं? तर्क React, Next.js और Vue के लिए समान है - केवल जीवनचक्र कोड बदलता है। React पेज बिल्डर, Next.js पेज बिल्डर, Vue पेज बिल्डर.
एक संपादक एक भारी अनुप्रयोग है और एक प्रकाशित पृष्ठ नहीं है। उन्हें एक बंडल के रूप में मानना जल्दी से बचने लायक गलती है।
जो उपयोगकर्ता कभी बिल्डर नहीं खोलते हैं उन्हें इसे कभी डाउनलोड नहीं करना चाहिए। एक आलसी मार्ग संपादक को आपके मुख्य बंडल से बाहर रखता है।
Angular के ज़ोन के बाहर संपादक बनाएं और इसे केवल उन हैंडलर्स में फिर से दर्ज करें जो रेंडर की गई स्थिति को अपडेट करते हैं।
परिसंपत्ति प्रबंधक को एक साथ कई हजार छवियों को सौंपने के बजाय अपने API के खिलाफ पेजिनेट करें।
उदाहरण बनाएं जब संपादक वास्तव में दिखाया जाता है, न कि जब आसपास का घटक माउंट होता है।
प्रकाशित आउटपुट HTML और CSS है। संपादक के बारे में कुछ भी इसके साथ शिप करने की आवश्यकता नहीं है।
संपादक रनटाइम और प्रकाशित पृष्ठ को समान प्रदर्शन आवश्यकताओं की आवश्यकता नहीं है।
एक विज़ुअल एडिटर उपयोगकर्ता-लिखित सामग्री को स्वीकार करता है और इसे आपके सिस्टम पर वापस लिखता है। इनमें से हर एक उस एक्सचेंज के सर्वर साइड पर है।
प्रत्येक लोड, स्टोर और प्रकाशित कॉल पर जांचें कि क्या यह उपयोगकर्ता इस प्रोजेक्ट पर कार्य कर सकता है।
सत्र से टैनेंट को हल करें, कभी भी पैरामीटर से क्लाइंट परिवर्तित नहीं कर सकता है।
प्रकार और आकार सर्वर-साइड को सत्यापित करें, और अपलोड को एक मूल से परोसें जो उन्हें निष्पादित नहीं कर सकता है।
स्टोरेज एडाप्टर ब्राउज़र में चलता है। इसके समापन बिंदुओं को आपके बाकी API के समान प्रमाणीकरण की आवश्यकता होती है।
जहां संपादक कस्टम कोड एम्बेड कर सकते हैं, उस मार्कअप को किसी और को दिए जाने से पहले सर्वर पर सैनिटाइज करें।
प्रकाशन से जनता जो देखती है उसे बदल देती है। इसे दर-सीमित करें, इसे लॉग करें और इसे अपनी अनुमति के पीछे गेट करें।
एक बटन छिपाने से UI बदल जाता है, न कि API। UI का तात्पर्य हर नियम के पीछे भी मौजूद होना चाहिए।
कभी भी केवल क्लाइंट-साइड अनुमतियों पर भरोसा न करें।
अपने GrapesJS एप्लिकेशन के अंदर Angular को एकीकृत करने, विस्तारित करने या अनुकूलित करने में सहायता चाहिए? हमारी टीम एकीकरण, कस्टम प्लगइन्स, UI अनुकूलन और उत्पादन कार्यान्वयन में मदद कर सकती है।
Angular एप्लिकेशन के अंदर एक विज़ुअल एडिटर जो उपयोगकर्ताओं को मार्कअप लिखने के बजाय घटकों को कैनवास पर खींचकर पृष्ठों को इकट्ठा करने देता है। Angular ऐप रूटिंग, प्रमाणीकरण और डेटा का मालिक है; संपादक संपादन सतह का मालिक है।
हाँ। GrapesJS ढांचा-अज्ञेयवादी है: यह आपके द्वारा दिए गए कंटेनर तत्व में प्रस्तुत करता है, इसलिए यह किसी भी अन्य DOM-आधारित पुस्तकालय की तरह Angular घटक के अंदर काम करता है।
नहीं - यह विज़ुअल एडिटिंग इंजन है जिस पर Angular पेज बिल्डर बनाया गया है। कोई आधिकारिक Angular रैपर नहीं है; आप कोर लाइब्रेरी को सीधे एकीकृत करते हैं, जो एक घटक और एक सेवा है।
पैकेज स्थापित करें, इंस्टेंस को इंजेक्टेबल सेवा में रखें, कंटेनर के DOM में आने के बाद इसे ngAfterViewInit में बनाएं, और इसे ngOnDestroy में नष्ट कर दें। पूर्ण गाइड रैपर, ज़ोन और उत्पादन संबंधी चिंताओं को कवर करता है।
हाँ। Blocks आपके स्वयं के लेबल, श्रेणी और सामग्री के साथ ब्लॉक प्रबंधक के माध्यम से पंजीकृत हैं, इसलिए पैलेट में केवल आपके उत्पाद द्वारा समर्थित अनुभाग हो सकते हैं।
हाँ। Component प्रकार अपने स्वयं के traits, ड्रॉप नियमों और व्यवहार के साथ पंजीकृत होते हैं, इस तरह संपादक को सामान्य HTML से आपके सामग्री मॉडल तक सीमित कर दिया जाता है।
हाँ। एक सहेजे गए प्रोजेक्ट को एक नए पृष्ठ के लिए शुरुआती बिंदु के रूप में पुनः लोड किया जा सकता है। टेम्पलेट लाइब्रेरी और प्रबंधक प्लगइन्स के रूप में भी उपलब्ध हैं यदि आप UI का निर्माण नहीं करना चाहते हैं।
हाँ। एक कस्टम स्टोरेज एडाप्टर पंजीकृत करें जिसकी लोड और स्टोर विधियां आपके API से HttpClient तक कॉल करती हैं, इसलिए आपके इंटरसेप्टर, ऑथ हेडर और त्रुटि हैंडलिंग हमेशा की तरह लागू होते हैं।
हाँ। संपादक एक JSON दस्तावेज़ तैयार करता है और कभी भी डेटाबेस से बात नहीं करता है, इसलिए उस दस्तावेज़ को कहाँ संग्रहीत किया जाता है यह पूरी तरह से एक बैकएंड निर्णय है।
हां, और यह सबसे आम उपयोगों में से एक है: एक प्रतिबंधित ब्लॉक पैलेट, ऑन-ब्रांड टेम्पलेट और एक प्रकाशन कार्रवाई जो आपके मार्केटिंग पृष्ठों को जहां से भी परोसा जाता है, वहां लिखती है।
हाँ। संपादक फॉर्म-आधारित संपादन स्क्रीन को बदल देता है; आपका CMS सामग्री प्रकार, वर्कफ़्लो और अनुमतियों का स्वामित्व रखता है।
हाँ। सत्यापन और नामकरण के लिए traits के साथ घटक प्रकारों के रूप में अपने स्वयं के फ़ील्ड घटकों को पंजीकृत करें, ताकि उपयोगकर्ता स्कीमा पर मानचित्रों को इकट्ठा करें जो आपका बैकएंड समझता है।
हां, लेकिन किरायेदारी आपके आवेदन का काम है। संपादक के पास किरायेदार की कोई अवधारणा नहीं है - आपका बैकएंड हल करता है कि वर्तमान उपयोगकर्ता कौन सी परियोजना, संपत्ति और टेम्पलेट देख सकता है।
हाँ। पैनल, आइकन, रंग, ब्लॉक श्रेणियां और शब्दावली सभी कॉन्फ़िगर करने योग्य हैं, और आप संपादक को अपने कमांड Angular UI से इसके कमांड API के माध्यम से ड्राइव कर सकते हैं।
आसपास का मार्ग सर्वर पर सामान्य रूप से प्रस्तुत करता है; संपादक स्वयं ब्राउज़र में ही बनाया गया है। isPlatformBrowser के साथ आरंभीकरण करें और सर्वर पर जल्दी लौटें।
runOutsideAngular के अंदर संपादक बनाएं ताकि कैनवास इंटरैक्शन लगातार परिवर्तन का पता लगाने को ट्रिगर न करे, फिर कुछ ईवेंट हैंडलर के अंदर NgZone.run का उपयोग करें जो आपके टेम्पलेट रेंडर को अपडेट करते हैं।
हाँ। GrapesJS अपनी स्वयं की प्रकार की परिभाषाएँ शिप करता है, इसलिए संपादक उदाहरण, इसका कॉन्फ़िगरेशन ऑब्जेक्ट और इसकी घटनाओं को एक साधारण Angular TypeScript कोडबेस में टाइप किया जाता है।
हाँ। प्लगइन्स ऐसे फ़ंक्शन हैं जो संपादक प्राप्त करते हैं और घटकों, ब्लॉक, कमांड या पैनलों को पंजीकृत करते हैं। GJS.Market ब्लॉक, समृद्ध पाठ, भंडारण, संपत्ति और निर्यात के लिए मुफ्त और वाणिज्यिक प्लगइन्स सूचीबद्ध करता है।
अपने एप्लिकेशन के लिए Angular और विज़ुअल संपादन अनुभव के लिए GrapesJS का उपयोग करें। अपने स्वयं के घटक, ब्लॉक, टेम्पलेट, भंडारण और प्रकाशन वर्कफ़्लो जोड़ें - फिर बिल्डर को GJS.Market प्लगइन्स के साथ विस्तारित करें जब आपको अधिक की आवश्यकता हो।
संपादक स्थापित करें, इसे Angular घटक के अंदर एक कंटेनर पर माउंट करें, और आज दोपहर स्क्रीन पर कुछ रखें।
शुरू हो जाओब्लॉक, टेम्प्लेट, रिच टेक्स्ट, स्टोरेज और एक्सपोर्ट - अपने उत्पाद को लिखने के बजाय उन क्षमताओं को इंस्टॉल करें जिनकी उन्हें लिखना चाहिए।
प्लगइन्स ब्राउज़ करेंजीवनचक्र, क्षेत्र, SSR, रैपर और उत्पादन चेकलिस्ट, एकीकरण पृष्ठ पर अंत से अंत तक कवर किया गया है।
देखें Angular गाइडआपका Angular ऐप। आपका संपादक। आपका उत्पाद।