ਬਲੇਜ਼ਰ ਵਿੱਚ HTML5 ਕੈਨਵਸ ਨਾਲ JavaScript ਨੂੰ ਜੋੜਨਾ
Blazor ਸਰਵਰ ਐਪਲੀਕੇਸ਼ਨ ਡਿਵੈਲਪਰਾਂ ਨੂੰ C# ਅਤੇ .NET ਤਕਨਾਲੋਜੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਸ਼ਕਤੀਸ਼ਾਲੀ ਵੈਬ ਐਪਲੀਕੇਸ਼ਨ ਬਣਾਉਣ ਲਈ ਲਚਕਤਾ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ। ਹਾਲਾਂਕਿ, ਅਜਿਹੇ ਹਾਲਾਤ ਹਨ ਜਿੱਥੇ JavaScript ਦਾ ਲਾਭ ਉਠਾਉਣਾ, ਖਾਸ ਤੌਰ 'ਤੇ HTML5 ਕੈਨਵਸ ਤੱਤ ਨੂੰ ਹੇਰਾਫੇਰੀ ਕਰਨ ਵਰਗੇ ਕੰਮਾਂ ਲਈ, ਜ਼ਰੂਰੀ ਹੋ ਜਾਂਦਾ ਹੈ। ਅਜਿਹੇ ਇੱਕ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਬਲੇਜ਼ਰ ਕੰਪੋਨੈਂਟ ਦੁਆਰਾ ਪਾਸ ਕੀਤੇ ਗਏ ਡੇਟਾ ਦੇ ਅਧਾਰ ਤੇ ਇੱਕ ਕੈਨਵਸ ਉੱਤੇ ਗਤੀਸ਼ੀਲ ਰੂਪ ਵਿੱਚ ਡਰਾਇੰਗ ਸ਼ਾਮਲ ਹੁੰਦਾ ਹੈ।
ਇਸ ਖਾਸ ਸੈੱਟਅੱਪ ਵਿੱਚ, ਤੁਹਾਡੇ ਕੋਲ ਤੁਹਾਡੇ ਬਲੇਜ਼ਰ ਰੇਜ਼ਰ ਪੰਨੇ ਵਿੱਚ ਇੱਕ ਲੂਪ ਹੋ ਸਕਦਾ ਹੈ ਜਿੱਥੇ ਵਿਅਕਤੀਗਤ HTML ਕੈਨਵਸ ਐਲੀਮੈਂਟਸ ਬਣਾਉਣ ਲਈ ਡੇਟਾ ਦੀ ਇੱਕ ਸੂਚੀ ਵਰਤੀ ਜਾਂਦੀ ਹੈ। ਹਰੇਕ ਕੈਨਵਸ ਲਈ, ਤੁਸੀਂ ਚਿੱਤਰਾਂ ਜਾਂ ਆਕਾਰਾਂ ਨੂੰ ਰੈਂਡਰ ਕਰਨ ਲਈ ਇੱਕ ਕਸਟਮ JavaScript ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ। C# ਅਤੇ JavaScript ਦਾ ਇਹ ਸੁਮੇਲ ਇੱਕ ਵਿਲੱਖਣ ਚੁਣੌਤੀ ਪੇਸ਼ ਕਰਦਾ ਹੈ ਪਰ ਵਧੀਆ ਬਹੁਪੱਖੀਤਾ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
ਜਦੋਂ ਕਿ ਤੁਸੀਂ ਇੱਕਲੇ HTML ਪ੍ਰੋਜੈਕਟਾਂ ਵਿੱਚ ਆਪਣੇ JavaScript ਕੋਡ ਦੀ ਸਫਲਤਾਪੂਰਵਕ ਜਾਂਚ ਕੀਤੀ ਹੋ ਸਕਦੀ ਹੈ, ਇਸ ਨੂੰ ਬਲੇਜ਼ਰ ਦੇ ਅੰਦਰ ਏਕੀਕ੍ਰਿਤ ਕਰਨਾ, ਖਾਸ ਤੌਰ 'ਤੇ ਇਸ ਨੂੰ ਰੇਜ਼ਰ HTML ਸੈਕਸ਼ਨ ਤੋਂ ਕਾਲ ਕਰਨ ਲਈ, ਇੱਕ ਵੱਖਰੀ ਪਹੁੰਚ ਦੀ ਲੋੜ ਹੈ। ਇਹ ਉਹ ਥਾਂ ਹੈ ਜਿੱਥੇ ਬਲੇਜ਼ਰ ਦਾ JavaScript ਇੰਟਰੌਪ ਲਾਗੂ ਹੁੰਦਾ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ 'IJSRuntime' ਸੇਵਾ ਦੀ ਵਰਤੋਂ ਦੁਆਰਾ।
ਇਸ ਗਾਈਡ ਵਿੱਚ, ਅਸੀਂ ਖੋਜ ਕਰਾਂਗੇ ਕਿ ਤੁਸੀਂ ਬਲੇਜ਼ਰ ਸਰਵਰ ਪ੍ਰੋਜੈਕਟ ਦੇ HTML ਸੈਕਸ਼ਨ ਦੇ ਅੰਦਰ ਕੈਨਵਸ ਨੂੰ ਹੇਰਾਫੇਰੀ ਕਰਨ ਲਈ ਆਪਣੇ ਕਸਟਮ JavaScript ਫੰਕਸ਼ਨ ਨੂੰ ਕਿਵੇਂ ਕਾਲ ਕਰ ਸਕਦੇ ਹੋ। ਅਸੀਂ Blazor ਅਤੇ JavaScript ਵਿਚਕਾਰ ਨਿਰਵਿਘਨ ਏਕੀਕਰਣ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਕਦਮ-ਦਰ-ਕਦਮ ਤੋੜ ਦੇਵਾਂਗੇ।
ਹੁਕਮ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ |
---|---|
@inject | ਦ @ਇੰਜੈਕਟ ਡਾਇਰੈਕਟਿਵ ਦੀ ਵਰਤੋਂ ਸੇਵਾ ਨੂੰ ਇੰਜੈਕਟ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ (ਜਿਵੇਂ ਕਿ IJSRuntime) ਇੱਕ ਬਲੇਜ਼ਰ ਕੰਪੋਨੈਂਟ ਵਿੱਚ. ਇਹ Blazor ਐਪ ਵਿੱਚ C# ਤੋਂ JavaScript ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਕਾਲ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, @inject IJSRuntime JSRuntime JavaScript ਰਨਟਾਈਮ ਸੇਵਾ ਨੂੰ ਇੰਜੈਕਟ ਕਰਦਾ ਹੈ। |
InvokeVoidAsync | ਇਹ ਵਿਧੀ ਦਾ ਹਿੱਸਾ ਹੈ IJSRuntime ਅਤੇ ਵਾਪਸੀ ਮੁੱਲ ਦੀ ਉਮੀਦ ਕੀਤੇ ਬਿਨਾਂ C# ਤੋਂ ਇੱਕ JavaScript ਫੰਕਸ਼ਨ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, JSRuntime.InvokeVoidAsync("drawImage", canvasId, data); JavaScript ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰਦਾ ਹੈ ਡਰਾਅ ਚਿੱਤਰ ਕੈਨਵਸ ਨੂੰ ਹੇਰਾਫੇਰੀ ਕਰਨ ਲਈ. |
OnAfterRenderAsync | ਬਲੇਜ਼ਰ ਵਿੱਚ ਇਹ ਜੀਵਨ-ਚੱਕਰ ਵਿਧੀ ਕੰਪੋਨੈਂਟ ਦੇ ਰੈਂਡਰ ਹੋਣ ਤੋਂ ਬਾਅਦ ਲਾਗੂ ਹੁੰਦੀ ਹੈ। ਇਹ ਅਕਸਰ ਪੰਨਾ ਅਤੇ ਇਸਦੇ ਤੱਤ ਤਿਆਰ ਹੋਣ ਤੋਂ ਬਾਅਦ JavaScript ਕੋਡ ਨੂੰ ਚਲਾਉਣ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਪੰਨੇ ਨੂੰ ਰੈਂਡਰ ਕਰਨ ਤੋਂ ਬਾਅਦ JavaScript ਮੋਡੀਊਲ ਨੂੰ ਲੋਡ ਕਰਨਾ। ਉਦਾਹਰਨ: ਸੁਰੱਖਿਅਤ ਓਵਰਰਾਈਡ ਅਸਿੰਕ ਟਾਸਕ OnAfterRenderAsync(bool firstRender)। |
IJSObjectReference | ਦ IJSOਬਜੈਕਟ ਰੈਫਰੈਂਸ Blazor ਵਿੱਚ JavaScript ਮੋਡੀਊਲ ਆਯਾਤ ਕਰਨ ਵੇਲੇ ਇੰਟਰਫੇਸ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਬਾਹਰੀ JS ਫਾਈਲਾਂ ਦਾ ਹਵਾਲਾ ਦੇ ਕੇ ਮਾਡਿਊਲਰ JavaScript ਪਰਸਪਰ ਪ੍ਰਭਾਵ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, IJSObjectReference jsModule = ਉਡੀਕ ਕਰੋ JSRuntime.InvokeAsync |
Verifiable | This is a method from the Moq library used in unit testing. It marks an expectation as verifiable, ensuring that the call to a mocked method (such as a JavaScript interop function) was made during the test. Example: jsInteropMock.Setup(x =>ਇਹ Moq ਲਾਇਬ੍ਰੇਰੀ ਤੋਂ ਇੱਕ ਵਿਧੀ ਹੈ ਜੋ ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਵਿੱਚ ਵਰਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ ਇੱਕ ਉਮੀਦ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਤੌਰ 'ਤੇ ਚਿੰਨ੍ਹਿਤ ਕਰਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਟੈਸਟ ਦੌਰਾਨ ਇੱਕ ਮਖੌਲ ਕੀਤੇ ਢੰਗ (ਜਿਵੇਂ ਕਿ JavaScript ਇੰਟਰੋਪ ਫੰਕਸ਼ਨ) ਨੂੰ ਕਾਲ ਕੀਤੀ ਗਈ ਸੀ। ਉਦਾਹਰਨ: jsInteropMock.Setup(x => x.InvokeAsync |
await | ਇਹ ਇੱਕ ਅਸਿੰਕ੍ਰੋਨਸ ਪ੍ਰੋਗ੍ਰਾਮਿੰਗ ਕਮਾਂਡ ਹੈ ਜੋ ਇੱਕ ਅਸਿੰਕ ਓਪਰੇਸ਼ਨ ਦੇ ਨਤੀਜੇ ਦੀ ਉਡੀਕ ਕਰਨ ਲਈ ਵਰਤੀ ਜਾਂਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਇੱਕ JavaScript ਇੰਟਰੌਪ ਕਾਲ। ਉਦਾਹਰਨ ਲਈ, JSRuntime.InvokeVoidAsync("drawImage", canvasId, data) ਦੀ ਉਡੀਕ ਕਰੋ; ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਜਾਰੀ ਰੱਖਣ ਤੋਂ ਪਹਿਲਾਂ ਫੰਕਸ਼ਨ ਪੂਰਾ ਹੋ ਜਾਵੇ। |
@code | ਦ @ਕੋਡ ਬਲੇਜ਼ਰ ਵਿੱਚ ਬਲਾਕ C# ਕੋਡ ਨੂੰ ਰੇਜ਼ਰ ਕੰਪੋਨੈਂਟ ਵਿੱਚ ਇਨਲਾਈਨ ਲਿਖਣ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਇਹ ਉਹ ਥਾਂ ਹੈ ਜਿੱਥੇ ਤਰਕ, ਜਿਵੇਂ ਕਿ JavaScript ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨਾ ਜਾਂ ਕੰਪੋਨੈਂਟ ਵਿਧੀਆਂ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਨਾ, ਰੱਖਿਆ ਗਿਆ ਹੈ। ਉਦਾਹਰਨ: @code { public void DrawImageOnCanvas() { ... } }। |
It.IsAny | ਇਹ ਇੱਕ ਮੌਕ ਸੈੱਟਅੱਪ ਦੇ ਦੌਰਾਨ ਇੱਕ ਨਿਸ਼ਚਿਤ ਕਿਸਮ ਦੇ ਕਿਸੇ ਵੀ ਮੁੱਲ ਨਾਲ ਮੇਲ ਕਰਨ ਲਈ ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਇੰਟਰੌਪ ਕਾਲਾਂ ਦਾ ਮਜ਼ਾਕ ਉਡਾਉਣ ਲਈ ਲਾਭਦਾਇਕ ਹੈ ਜੋ ਡਾਇਨਾਮਿਕ ਡੇਟਾ ਨੂੰ ਸਵੀਕਾਰ ਕਰਦੇ ਹਨ। ਉਦਾਹਰਨ: It.IsAny |
ਕੈਨਵਸ ਹੇਰਾਫੇਰੀ ਲਈ ਬਲੇਜ਼ਰ ਅਤੇ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਇੰਟਰੌਪ ਦੀ ਵਿਆਖਿਆ ਕਰਨਾ
ਪਹਿਲੀ ਸਕ੍ਰਿਪਟ ਉਦਾਹਰਨ ਦਰਸਾਉਂਦੀ ਹੈ ਕਿ ਕਿਵੇਂ ਲਾਭ ਉਠਾਉਣਾ ਹੈ IJSRuntime ਬਲੇਜ਼ਰ ਕੰਪੋਨੈਂਟ ਦੇ ਅੰਦਰੋਂ JavaScript ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਲਈ। ਦ @ਇੰਜੈਕਟ ਡਾਇਰੈਕਟਿਵ ਦੀ ਵਰਤੋਂ ਟੀਕੇ ਲਗਾਉਣ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ IJSRuntime ਸੇਵਾ, ਜੋ Blazor ਅਤੇ JavaScript ਵਿਚਕਾਰ ਸੰਚਾਰ ਦੀ ਸਹੂਲਤ ਦਿੰਦੀ ਹੈ। ਇਹ ਉਦੋਂ ਜ਼ਰੂਰੀ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਤੁਹਾਨੂੰ HTML ਤੱਤਾਂ ਜਿਵੇਂ ਕਿ ਹੇਰਾਫੇਰੀ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ HTML5 ਕੈਨਵਸ C# ਤੋਂ. ਇਸ ਉਦਾਹਰਨ ਵਿੱਚ, ਇੱਕ ਲੂਪ ਡੇਟਾ ਦੀ ਇੱਕ ਸੂਚੀ ਵਿੱਚੋਂ ਲੰਘਦਾ ਹੈ, ਅਤੇ ਸੂਚੀ ਵਿੱਚ ਹਰੇਕ ਆਈਟਮ ਲਈ, ਇੱਕ ਕੈਨਵਸ ਤੱਤ ਗਤੀਸ਼ੀਲ ਰੂਪ ਵਿੱਚ ਤਿਆਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਇੱਕ ਬਟਨ ਕਲਿੱਕ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, JavaScript ਫੰਕਸ਼ਨ ਡਰਾਅ ਚਿੱਤਰ ਕੈਨਵਸ ਦੀ ID ਅਤੇ ਸੰਬੰਧਿਤ ਡੇਟਾ ਨੂੰ ਪਾਸ ਕਰਨ ਲਈ ਕਿਹਾ ਜਾਂਦਾ ਹੈ।
ਇਸ ਪਹੁੰਚ ਦੀ ਕੁੰਜੀ ਦੀ ਵਰਤੋਂ ਹੈ InvokeVoidAsync, ਇੱਕ ਵਿਧੀ ਜੋ C# ਨੂੰ ਵਾਪਸੀ ਮੁੱਲ ਦੀ ਉਮੀਦ ਕੀਤੇ ਬਿਨਾਂ JavaScript ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ। ਇਹ ਉਦੋਂ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਤੁਸੀਂ ਸਿਰਫ਼ ਇੱਕ ਕਾਰਵਾਈ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਜਿਵੇਂ ਕਿ ਕੈਨਵਸ 'ਤੇ ਇੱਕ ਚਿੱਤਰ ਬਣਾਉਣਾ, ਅਤੇ JavaScript ਤੋਂ ਜਵਾਬ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ। ਇਕ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਹਿੱਸਾ ਹੈ OnAfterRenderAsync ਬਲੇਜ਼ਰ ਵਿੱਚ ਜੀਵਨ ਚੱਕਰ ਵਿਧੀ, ਜੋ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਕੰਪੋਨੈਂਟ ਪੂਰੀ ਤਰ੍ਹਾਂ ਰੈਂਡਰ ਹੋਣ ਤੋਂ ਬਾਅਦ JavaScript ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਕੈਨਵਸ ਵਰਗੇ DOM ਤੱਤਾਂ ਦੀ ਹੇਰਾਫੇਰੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਕਿਉਂਕਿ ਕੈਨਵਸ ਨੂੰ ਬਹੁਤ ਜਲਦੀ ਐਕਸੈਸ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਨਾਲ ਗਲਤੀਆਂ ਹੋ ਸਕਦੀਆਂ ਹਨ।
ਦੂਜੀ ਸਕ੍ਰਿਪਟ ਉਦਾਹਰਨ ਵਿੱਚ, ਇੱਕ ਹੋਰ ਮਾਡਯੂਲਰ ਪਹੁੰਚ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਪੇਸ਼ ਕੀਤਾ ਗਿਆ ਹੈ IJSOਬਜੈਕਟ ਰੈਫਰੈਂਸ. ਇਹ ਤੁਹਾਨੂੰ JavaScript ਕੋਡ ਨੂੰ ਇੱਕ ਮੋਡੀਊਲ ਵਜੋਂ ਲੋਡ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਜਿਸ ਨੂੰ ਕਈ ਹਿੱਸਿਆਂ ਵਿੱਚ ਮੁੜ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਮੋਡੀਊਲ ਨੂੰ ਇੱਕ ਵਾਰ ਲੋਡ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਫਿਰ ਲੋੜ ਪੈਣ 'ਤੇ ਇਸਦੇ ਅੰਦਰਲੇ ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਬੁਲਾਇਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਵਿਧੀ ਕੋਡ ਦੀ ਸਾਂਭ-ਸੰਭਾਲ ਵਿੱਚ ਸੁਧਾਰ ਕਰਦੀ ਹੈ ਅਤੇ ਵੱਡੇ JavaScript ਕੋਡਬੇਸਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨਾ ਆਸਾਨ ਬਣਾਉਂਦੀ ਹੈ। JavaScript ਮੋਡੀਊਲ ਨੂੰ ਸਿਰਫ਼ ਇੱਕ ਵਾਰ ਆਯਾਤ ਕਰਨ ਨਾਲ, ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਕਾਰਗੁਜ਼ਾਰੀ ਨੂੰ ਵਧਾਇਆ ਜਾਂਦਾ ਹੈ, ਅਤੇ ਤੁਸੀਂ ਸਕ੍ਰਿਪਟਾਂ ਨੂੰ ਬੇਲੋੜੀ ਰੀਲੋਡ ਕਰਨ ਤੋਂ ਬਚਦੇ ਹੋ।
ਅੰਤ ਵਿੱਚ, ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਸਕ੍ਰਿਪਟ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ ਮੋਕ ਲਾਇਬ੍ਰੇਰੀ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਕਿ JavaScript ਇੰਟਰੌਪ ਕਾਲਾਂ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰ ਰਹੀਆਂ ਹਨ। ਦ ਪੁਸ਼ਟੀਕਰਨਯੋਗ ਵਿਧੀ ਦੀ ਵਰਤੋਂ ਸੰਭਾਵਿਤ ਕਾਲਾਂ ਨੂੰ ਚਿੰਨ੍ਹਿਤ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ InvokeAsync ਵੈਰੀਫਾਈਬਲ ਦੇ ਤੌਰ 'ਤੇ, ਮਤਲਬ ਕਿ ਟੈਸਟਾਂ ਦੌਰਾਨ, ਤੁਸੀਂ ਜਾਂਚ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਕੀ ਇੰਟਰੋਪ ਫੰਕਸ਼ਨ ਨੂੰ ਸਹੀ ਮਾਪਦੰਡਾਂ ਨਾਲ ਕਾਲ ਕੀਤਾ ਗਿਆ ਸੀ। ਇਹ ਵਿਧੀ ਯਕੀਨੀ ਬਣਾਉਂਦੀ ਹੈ ਕਿ ਬਲੇਜ਼ਰ ਅਤੇ JavaScript ਵਿਚਕਾਰ ਏਕੀਕਰਣ ਮਜ਼ਬੂਤ ਹੈ, ਅਤੇ ਇਹ ਟੈਸਟਿੰਗ ਦੌਰਾਨ ਇੰਟਰੌਪ ਕਾਲਾਂ ਦੀ ਸ਼ੁੱਧਤਾ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਕੇ ਤੁਹਾਡੇ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਭਰੋਸੇਯੋਗਤਾ ਦੀ ਇੱਕ ਵਾਧੂ ਪਰਤ ਜੋੜਦਾ ਹੈ।
ਹੱਲ 1: HTML5 ਕੈਨਵਸ ਦੇ ਨਾਲ JavaScript ਇੰਟਰੋਪ ਲਈ IJSRuntime ਦੀ ਵਰਤੋਂ ਕਰਨਾ
ਇਹ ਪਹੁੰਚ ਦਰਸਾਉਂਦੀ ਹੈ ਕਿ Blazor ਵਿੱਚ IJSRuntime ਸੇਵਾ ਨੂੰ ਇੱਕ JavaScript ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰਨ ਲਈ ਕਿਵੇਂ ਵਰਤਣਾ ਹੈ ਜੋ HTML5 ਕੈਨਵਸ ਵਿੱਚ ਹੇਰਾਫੇਰੀ ਕਰਦਾ ਹੈ।
// MyPage.razor
@page "/mypage"
@inject IJSRuntime JSRuntime
@code {
private async Task DrawImageOnCanvas(MyData data)
{
await JSRuntime.InvokeVoidAsync("drawImage", data.Id, data);
}
}
<div>@foreach (var data in ListOfMyData) {
<div><canvas id="@data.Id" class="myDataImage"></canvas></div>
<button @onclick="() => DrawImageOnCanvas(data)">Draw Image</button>
}</div>
ਹੱਲ 2: JavaScript ਮੋਡੀਊਲ ਨੂੰ ਲੋਡ ਕਰਨ ਲਈ JSObjectReference ਦੀ ਵਰਤੋਂ ਕਰਨਾ
ਇਹ ਹੱਲ ਇੱਕ ਮੋਡੀਊਲ ਦੇ ਤੌਰ ਤੇ JavaScript ਫਾਈਲ ਨੂੰ ਲੋਡ ਕਰਕੇ ਇੱਕ ਮਾਡਿਊਲਰ ਪਹੁੰਚ ਲੈਂਦਾ ਹੈ, ਜੋ ਕਿ ਮੁੜ ਵਰਤੋਂ ਯੋਗ ਅਤੇ ਸਾਫ਼ ਹੈ।
// MyPage.razor
@page "/mypage"
@inject IJSRuntime JSRuntime
@code {
private IJSObjectReference _jsModule;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
_jsModule = await JSRuntime.InvokeAsync<IJSObjectReference>("import", "./js/MyJavaScript.js");
}
}
private async Task DrawImageOnCanvas(MyData data)
{
await _jsModule.InvokeVoidAsync("drawImage", data.Id, data);
}
}
<div>@foreach (var data in ListOfMyData) {
<div><canvas id="@data.Id" class="myDataImage"></canvas></div>
<button @onclick="() => DrawImageOnCanvas(data)">Draw Image</button>
}</div>
ਹੱਲ 3: HTML5 ਕੈਨਵਸ ਦੇ ਨਾਲ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਇੰਟਰੌਪ ਦੀ ਜਾਂਚ ਯੂਨਿਟ
ਇਹ ਹੱਲ ਬਲੇਜ਼ਰ ਕੰਪੋਨੈਂਟਸ ਲਈ bUnit ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਜੋੜਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਕੈਨਵਸ ਹੇਰਾਫੇਰੀ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਦੀ ਹੈ।
// TestComponent.razor.cs
@page "/testpage"
@inject IJSRuntime JSRuntime
@code {
public void TestDrawImage()
{
var jsInteropMock = new Mock<IJSRuntime>();
jsInteropMock.Setup(x => x.InvokeAsync<Void>("drawImage", It.IsAny<object[]>())).Verifiable();
jsInteropMock.Verify();
}
}
ਬਲੇਜ਼ਰ ਵਿੱਚ ਡਾਇਨਾਮਿਕ ਕੈਨਵਸ ਹੇਰਾਫੇਰੀ ਲਈ JavaScript ਇੰਟਰੋਪ ਦੀ ਪੜਚੋਲ ਕਰਨਾ
ਬਲੇਜ਼ਰ ਵਿੱਚ, ਕਸਟਮ JavaScript ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਕਾਲ ਕਰਨ ਦੀ ਸਮਰੱਥਾ ਗਤੀਸ਼ੀਲ ਫਰੰਟ-ਐਂਡ ਹੇਰਾਫੇਰੀ ਲਈ ਸ਼ਕਤੀਸ਼ਾਲੀ ਵਿਕਲਪ ਖੋਲ੍ਹਦੀ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਗ੍ਰਾਫਿਕਲ ਤੱਤਾਂ ਨਾਲ ਕੰਮ ਕਰਨਾ ਜਿਵੇਂ ਕਿ HTML5 ਕੈਨਵਸ. ਇਸ ਪ੍ਰਕਿਰਿਆ ਦਾ ਇੱਕ ਮੁੱਖ ਪਹਿਲੂ ਜੋ ਅਜੇ ਤੱਕ ਕਵਰ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ, ਬਲੇਜ਼ਰ ਦੇ ਸਰਵਰ-ਸਾਈਡ ਆਰਕੀਟੈਕਚਰ ਦੇ ਅੰਦਰ ਅਸਿੰਕ੍ਰੋਨਸ ਜਾਵਾਸਕ੍ਰਿਪਟ ਕਾਲਾਂ ਦੀ ਵਰਤੋਂ ਹੈ। ਜਿਵੇਂ ਕਿ ਬਲੇਜ਼ਰ ਸਰਵਰ 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ, ਕਲਾਇੰਟ ਅਤੇ ਸਰਵਰ ਵਿਚਕਾਰ ਸੰਚਾਰ ਨੂੰ SignalR ਦੁਆਰਾ ਸੰਭਾਲਿਆ ਜਾਂਦਾ ਹੈ, ਜਿਸਦਾ ਮਤਲਬ ਹੈ ਕਿ ਜਦੋਂ ਤੁਸੀਂ ਰੇਜ਼ਰ ਪੰਨੇ ਤੋਂ JavaScript ਫੰਕਸ਼ਨ ਨੂੰ ਕਾਲ ਕਰਦੇ ਹੋ, ਤਾਂ ਇੰਟਰੈਕਸ਼ਨ ਥੋੜੀ ਦੇਰੀ ਨਾਲ ਹੁੰਦਾ ਹੈ। ਇਹ ਸਮਝਣਾ ਕਿ ਇਹਨਾਂ ਅਸਿੰਕ੍ਰੋਨਸ ਓਪਰੇਸ਼ਨਾਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਣਾ ਹੈ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਕੈਨਵਸ ਹੇਰਾਫੇਰੀ ਸੁਚਾਰੂ ਢੰਗ ਨਾਲ ਹੁੰਦੀ ਹੈ।
ਇੱਕ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਕਾਰਕ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਅਤੇ C# ਇੰਟਰੈਕਟ ਦੇ ਤਰੀਕੇ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣਾ ਹੈ ਜਦੋਂ ਪੰਨੇ 'ਤੇ ਕਈ ਕੈਨਵਸ ਤੱਤ ਹੁੰਦੇ ਹਨ। ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਸੂਚੀ ਵਿੱਚ ਲੂਪ ਕਰ ਰਹੇ ਹੋ, ਅਤੇ ਹਰੇਕ ਆਈਟਮ ਦੀ ਆਪਣੀ ਹੁੰਦੀ ਹੈ ਕੈਨਵਸ ਤੱਤ, ਚੁਣੌਤੀ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਹੈ ਕਿ ਹਰੇਕ ਕੈਨਵਸ ਅਨੁਸਾਰੀ JavaScript ਫੰਕਸ਼ਨ ਤੋਂ ਸਹੀ ਡਰਾਇੰਗ ਨਿਰਦੇਸ਼ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ। ਇਹ ਯਕੀਨੀ ਬਣਾ ਕੇ ਕੁਸ਼ਲਤਾ ਨਾਲ ਸੰਭਾਲਿਆ ਜਾ ਸਕਦਾ ਹੈ ਕਿ ਹਰੇਕ ਕੈਨਵਸ ਦਾ ਇੱਕ ਵਿਲੱਖਣ ਪਛਾਣਕਰਤਾ ਹੈ, ਇੰਟਰਪ ਕਾਲ ਵਿੱਚ ਇੱਕ ਪੈਰਾਮੀਟਰ ਵਜੋਂ ਪਾਸ ਕੀਤਾ ਗਿਆ ਹੈ। ਕਈ ਕੈਨਵਸਾਂ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰਦੇ ਸਮੇਂ JavaScript ਦੇ ਅੰਦਰ ਸਹੀ ਤਰੁੱਟੀ ਨੂੰ ਸੰਭਾਲਣਾ ਅਤੇ ਪ੍ਰਮਾਣਿਕਤਾ ਵੀ ਮਹੱਤਵਪੂਰਨ ਬਣ ਜਾਂਦੀ ਹੈ।
ਅੰਤ ਵਿੱਚ, ਬਲੇਜ਼ਰ ਵਿੱਚ JavaScript ਇੰਟਰੌਪ ਨਾਲ ਨਜਿੱਠਣ ਵੇਲੇ ਪ੍ਰਦਰਸ਼ਨ ਦੇ ਵਿਚਾਰ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦੇ ਹਨ। ਹਾਲਾਂਕਿ ਛੋਟੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਜ਼ਿਆਦਾਤਰ ਮਾਮਲਿਆਂ ਵਿੱਚ ਚੰਗੀ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਦੀਆਂ ਹਨ, ਭਾਰੀ ਕੈਨਵਸ ਓਪਰੇਸ਼ਨ ਜਿਵੇਂ ਕਿ ਗੁੰਝਲਦਾਰ ਆਕਾਰਾਂ ਜਾਂ ਚਿੱਤਰਾਂ ਨੂੰ ਪੇਸ਼ ਕਰਨਾ ਅਨੁਕੂਲਿਤ ਨਾ ਹੋਣ 'ਤੇ ਪ੍ਰਦਰਸ਼ਨ ਵਿੱਚ ਰੁਕਾਵਟ ਪੈਦਾ ਕਰ ਸਕਦਾ ਹੈ। ਤਕਨੀਕਾਂ ਜਿਵੇਂ ਕਿ ਕੈਨਵਸ ਦੇ ਆਕਾਰ ਨੂੰ ਸੀਮਤ ਕਰਨਾ, ਆਫ-ਸਕ੍ਰੀਨ ਕੈਨਵਸ ਦੀ ਵਰਤੋਂ ਕਰਨਾ, ਜਾਂ ਬੈਚ ਪ੍ਰੋਸੈਸਿੰਗ ਗ੍ਰਾਫਿਕਲ ਤਬਦੀਲੀਆਂ ਰੈਂਡਰਿੰਗ ਸਪੀਡ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦੀਆਂ ਹਨ। ਇਹਨਾਂ ਓਪਟੀਮਾਈਜੇਸ਼ਨ ਰਣਨੀਤੀਆਂ ਨੂੰ ਸਮਝਣਾ ਇਹ ਯਕੀਨੀ ਬਣਾਏਗਾ ਕਿ ਤੁਹਾਡੀ Blazor ਐਪ ਗੁੰਝਲਦਾਰ ਫਰੰਟ-ਐਂਡ ਰੈਂਡਰਿੰਗ ਕਾਰਜਾਂ ਨੂੰ ਸੰਭਾਲਦੇ ਹੋਏ ਕਾਰਜਸ਼ੀਲ ਰਹੇ।
JavaScript Interop in Blazor ਬਾਰੇ ਅਕਸਰ ਪੁੱਛੇ ਜਾਂਦੇ ਸਵਾਲ - Frequently asked Questions about JavaScript Interop in Blazor
- ਮੈਂ Blazor ਤੋਂ JavaScript ਵਿੱਚ ਡੇਟਾ ਕਿਵੇਂ ਪਾਸ ਕਰਾਂ?
- ਤੁਸੀਂ ਵਰਤ ਸਕਦੇ ਹੋ JSRuntime.InvokeVoidAsync ਤੁਹਾਡੇ ਬਲੇਜ਼ਰ ਕੰਪੋਨੈਂਟ ਤੋਂ ਇੱਕ JavaScript ਫੰਕਸ਼ਨ ਵਿੱਚ ਡੇਟਾ ਪਾਸ ਕਰਨ ਲਈ।
- JavaScript ਨਾਲ ਇੰਟਰੈਕਟ ਕਰਦੇ ਸਮੇਂ ਮੈਂ ਬਲੇਜ਼ਰ ਵਿੱਚ ਅਸਿੰਕ ਕਾਲਾਂ ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਾਂ?
- ਬਲੇਜ਼ਰ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ async ਵਰਗੇ ਢੰਗ InvokeVoidAsync ਅਸਿੰਕ੍ਰੋਨਸ JavaScript ਕਾਲਾਂ ਕਰਨ ਲਈ।
- ਇੱਕ ਲੂਪ ਵਿੱਚ ਮਲਟੀਪਲ ਕੈਨਵਸ ਐਲੀਮੈਂਟਸ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਦਾ ਸਭ ਤੋਂ ਵਧੀਆ ਤਰੀਕਾ ਕੀ ਹੈ?
- ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਹਰੇਕ ਕੈਨਵਸ ਤੱਤ ਦਾ ਇੱਕ ਵਿਲੱਖਣ ਹੈ id, ਅਤੇ ਕਾਲ ਕਰਨ ਵੇਲੇ ਇਸ ਨੂੰ ਪੈਰਾਮੀਟਰ ਵਜੋਂ ਪਾਸ ਕਰੋ drawImage ਫੰਕਸ਼ਨ।
- ਕੀ ਮੈਂ Blazor ਨਾਲ ਬਾਹਰੀ JavaScript ਲਾਇਬ੍ਰੇਰੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦਾ ਹਾਂ?
- ਹਾਂ, ਤੁਸੀਂ ਵਰਤ ਕੇ ਬਾਹਰੀ ਲਾਇਬ੍ਰੇਰੀਆਂ ਨੂੰ ਆਯਾਤ ਕਰ ਸਕਦੇ ਹੋ IJSObjectReference ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਆਪਣੇ ਬਲੇਜ਼ਰ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ ਮੋਡੀਊਲ ਵਜੋਂ ਲੋਡ ਕਰੋ।
- ਦੀ ਭੂਮਿਕਾ ਕੀ ਹੈ IJSObjectReference ਬਲੇਜ਼ਰ ਵਿੱਚ?
- ਇਹ ਬਲੇਜ਼ਰ ਨੂੰ ਜਾਵਾ ਸਕ੍ਰਿਪਟ ਮੋਡੀਊਲ ਨਾਲ ਮਾਡਿਊਲਰ, ਮੁੜ ਵਰਤੋਂ ਯੋਗ ਤਰੀਕੇ ਨਾਲ ਇੰਟਰੈਕਟ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਕੋਡ ਸੰਗਠਨ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਂਦਾ ਹੈ।
Blazor ਅਤੇ JavaScript Interop 'ਤੇ ਅੰਤਿਮ ਵਿਚਾਰ
ਇੱਕ ਬਲੇਜ਼ਰ ਸਰਵਰ ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ JavaScript ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕਰਨ ਨਾਲ ਫਰੰਟ-ਐਂਡ ਕਾਰਜਕੁਸ਼ਲਤਾ ਵਿੱਚ ਮਹੱਤਵਪੂਰਨ ਵਾਧਾ ਹੋ ਸਕਦਾ ਹੈ, ਖਾਸ ਕਰਕੇ HTML5 ਕੈਨਵਸ ਵਰਗੇ ਤੱਤਾਂ ਲਈ। IJSRuntime ਦੀ ਵਰਤੋਂ ਕਰਕੇ, Blazor C# ਅਤੇ JavaScript ਵਿਚਕਾਰ ਸਹਿਜ ਸੰਚਾਰ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਗ੍ਰਾਫਿਕਸ ਦੀ ਗਤੀਸ਼ੀਲ ਰੈਂਡਰਿੰਗ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ।
ਭਾਵੇਂ ਤੁਸੀਂ ਕਈ ਕੈਨਵਸ ਐਲੀਮੈਂਟਸ ਨੂੰ ਸੰਭਾਲ ਰਹੇ ਹੋ ਜਾਂ ਪ੍ਰਦਰਸ਼ਨ ਲਈ ਅਨੁਕੂਲ ਬਣਾ ਰਹੇ ਹੋ, ਇਹ ਸਮਝਣਾ ਕਿ JavaScript ਫੰਕਸ਼ਨਾਂ ਨੂੰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਕਿਵੇਂ ਕਾਲ ਕਰਨਾ ਹੈ ਮਜ਼ਬੂਤ ਵੈੱਬ ਐਪਲੀਕੇਸ਼ਨਾਂ ਬਣਾਉਣ ਦੀ ਕੁੰਜੀ ਹੈ। ਦੱਸੇ ਗਏ ਕਦਮ ਤੁਹਾਡੇ ਬਲੇਜ਼ਰ ਪ੍ਰੋਜੈਕਟਾਂ ਲਈ ਨਿਰਵਿਘਨ ਏਕੀਕਰਣ ਅਤੇ ਬਿਹਤਰ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹਨ।
ਬਲੇਜ਼ਰ ਵਿੱਚ JavaScript ਇੰਟਰੋਪ ਲਈ ਹਵਾਲੇ ਅਤੇ ਸਰੋਤ
- ਅਧਿਕਾਰਤ ਦਸਤਾਵੇਜ਼ਾਂ ਅਤੇ ਬਲੇਜ਼ਰ ਵਿੱਚ JavaScript ਇੰਟਰਪੌਪ ਦੀ ਡੂੰਘਾਈ ਨਾਲ ਸਮਝ ਲਈ, ਵੇਖੋ ASP.NET ਕੋਰ ਬਲੇਜ਼ਰ JavaScript ਇੰਟਰਓਪਰੇਬਿਲਟੀ ਗਾਈਡ .
- ਇਸ ਮਦਦਗਾਰ ਲੇਖ ਤੋਂ JavaScript ਦੇ ਨਾਲ HTML5 ਕੈਨਵਸ ਤੱਤਾਂ ਦੇ ਪ੍ਰਬੰਧਨ ਬਾਰੇ ਹੋਰ ਜਾਣੋ: MDN ਵੈੱਬ ਡੌਕਸ - ਕੈਨਵਸ API .
- ਬਲੇਜ਼ਰ ਵਿੱਚ ਯੂਨਿਟ ਟੈਸਟਿੰਗ JavaScript ਇੰਟਰਪੌਪ ਲਈ ਵਰਤੀ ਜਾਂਦੀ ਇੱਕ ਟੈਸਟਿੰਗ ਲਾਇਬ੍ਰੇਰੀ, Moq ਲਈ ਪੂਰੇ ਦਸਤਾਵੇਜ਼ਾਂ ਦੀ ਪੜਚੋਲ ਕਰੋ: Moq ਤੇਜ਼ ਸ਼ੁਰੂਆਤ .