Ошибка AngularJS 1.5 при загрузке IBM Mobilefirst
Кажется, у меня проблемы с сочетанием гибридного (без кордового) МФУ и углового 1,5. То же приложение с angular 1.4.9 работает нормально, но если я переключусь на angular 1.5, я получу эту ошибку:
Error: [$injector:modulerr] Failed to instantiate module ng due to:
TypeError: Cannot set property 'aHrefSanitizationWhitelist' of null
at $$SanitizeUriProvider (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/vendor/angular5.js:17272:35)
at new <anonymous> (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/worklight/worklight.js:1033:23)
at Object.instantiate (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/vendor/angular5.js:4621:14)
at provider (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/vendor/angular5.js:4435:36)
at http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/vendor/angular5.js:367:32
at forEach (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/vendor/angular5.js:337:20)
at Object.provider (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/vendor/angular5.js:4425:9)
at ngModule (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/vendor/angular5.js:2476:16)
at Object.invoke (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/vendor/angular5.js:4606:19)
at runInvokeQueue (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/vendor/angular5.js:4499:35)
http://errors.angularjs.org/1.5.0/$injector/modulerr?p0=ng&p1=TypeError%3A%…%2FHelloWorld%2Fandroid%2F1.0%2Fdefault%2Fvendor%2Fangular5.js%3A4499%3A35)
У кого-нибудь есть подсказка, что это может быть?
3 ответа
У меня была точно такая же проблема, когда я обновился до угловой версии 1.5.0.
Проблема оказалась с пользовательской реализацией Function.prototype.bind
что мы имели в нашем коде, похоже, что это мешало тому, что определено в angular.
Возьмите на второй строке вашу ошибку callstack
at new <anonymous> (http://localhost:10080/Hybrid/apps/services/preview/HelloWorld/android/1.0/default/worklight/worklight.js:1033:23)
Я думаю, что worklight.js может иметь реализацию prototype.bind
который несовместим с угловым (см. https://code.angularjs.org/1.5.0/docs/api/ng/function/angular.bind)
Как уже упоминалось, это может быть вызвано полизаполнением для Function.prototype.bind. В частности, это, кажется, вызвано теми, которые неправильно обрабатывают вызов функции как конструктора с новым. Простые реализации могут всегда возвращать связанный объект независимо от вызова, тогда как ожидается, что новый оператор превалирует над связыванием, а вместо этого возвращается вновь созданный объект.
например.
// create an object to bind to
var alt = {
message: 'I am the alternate'
};
// our function
function myFunc() {
console.log( this.message );
};
// bind our alternate object to this for myFunc
myFunc.bind( alt );
Стандартный вызов выполняется как ожидалось
myFunc(); // output 'I am the alternate'
Вызов через новый не так, как ожидалось (это тот, который ломает угловой 1.5)
new myFunc(); // also outputs 'I am the alternate'</jscodeblock>
Ожидаемое поведение заключается в том, что новый вызов вернет новый объект, а не связанный.
Если вам нужен polyfill для Function.prototype.bind, убедитесь, что он правильно обрабатывает этот сценарий, такой как сценарий, найденный в MDN.