[英]Umbraco v8: custom script call model change
我有一個 Umbraco 插件,它實際上是一個 vanilla.js 文件,它允許我從服務中檢索一些 JSON,然后它填寫當前頁面上的一些字段,例如通過執行以下操作:
var setTxt = function(id, val) {
var txt = document.getElementById(id);
if (txt && val != null && val != undefined) {
return txt.value = val;
};
};
但是,當我點擊保存時,angular model 沒有保存對輸入的任何更改 - 可能是因為沒有觸發更改檢測。
我已經嘗試過使用“發布者”字段:
angular.element(document.querySelector("#publisher")).scope().apply()
但我得到了錯誤:
VM94421:95 TypeError: Cannot read property 'apply' of undefined
我真的不想陷入 angular 1 ,我的香草 js 一切正常,我只需要讓 umbraco 舀出我在各個領域設置的所有值。
問)我該如何強制?
ps - 請不要評論這是不好的做法,我只需要完成這項工作。
通過問題海報編輯:原來 jQuery Lite 已經包含在內,您可以致電:
$('#' + id).trigger('input');
下面的原始答案也有效:
您應該觸發“輸入”事件,讓 angular 知道您的更改:
var setTxt = function(id, val) {
var txt = document.getElementById(id);
if (txt && val != null && val != undefined) {
txt.value = val;
raiseEvent(txt, 'input');
return val;
};
};
var raiseEvent = function(el, eventType) {
var event = document.createEvent('Event');
event.initEvent(eventType, true, true);
el.dispatchEvent(event);
};
順便說一句,$scope 沒有“應用”function。 它的名字是“$apply”。 此外,據我了解,“scope.$appy(cb)”將獲取應用於 scope 變量的更改,在您的情況下,您可以直接使用 dom 元素進行操作。
必須啟用 Debug Data 才能使調用angular.element(yourElement).scope()
的功能正常工作。 看起來它默認啟用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.