Aku punya cukup sederhana Sudut aplikasi yang berjalan baik-baik saja pada saya dev mesin, tapi gagal dengan pesan kesalahan ini (di konsol browser) setelah saya menyebarkan ini:
Tertangkap Error: [$injector:bersahaj] http://errors.angularjs.org/undefined/$injector/unpr?p0=tProvider%20%3C-%20t%20%3C-%20%24http%20%3C-%20%24compile
Tidak ada pesan lain selain itu. Hal itu terjadi saat halaman pertama.
I'm berjalan ASP.NET MVC5, Sudut 1.2RC3, dan mendorong untuk Azure melalui git.
Googling belum't muncul sesuatu yang menarik.
Ada saran?
EDIT:
I'm menggunakan Ketangkasan, dan mendefinisikan saya ketergantungan dengan $inject
variabel, misalnya:
export class DashboardCtrl {
public static $inject = [
'$scope',
'$location',
'dashboardStorage'
];
constructor(
private $scope: IDashboardScope,
private $location: ng.ILocationService,
private storage: IDashboardStorage) {
}
}
Saya percaya bahwa harus (atau dimaksudkan untuk) mendapatkan sekitar variabel lokal nama masalah-masalah yang timbul selama minification dan yang dapat menyebabkan kesalahan ini.
Yang mengatakan, itu jelas memiliki sesuatu untuk dilakukan dengan minification proses, seperti ketika saya set BundleTable.EnableOptimizations = true
on my dev mesin, saya dapat mereproduksi itu.
Jika anda mengikuti link anda, itu memberitahu anda bahwa kesalahan hasil dari $injector tidak mampu mengatasi ketergantungan. Ini adalah masalah umum dengan sudut ketika javascript mendapat minified/uglified/apa pun yang anda're lakukan untuk produksi.
Masalah adalah ketika anda memiliki misalnya controller;
angular.module("MyApp").controller("MyCtrl", function($scope, $q) {
// your code
})
Yang minification perubahan $lingkup
dan $t
menjadi variabel acak yang doesn't memberitahu sudut apa yang harus inject. Solusinya adalah untuk menyatakan ketergantungan seperti ini:
angular.module("MyApp")
.controller("MyCtrl", ["$scope", "$q", function($scope, $q) {
// your code
}])
Yang harus memperbaiki masalah anda.
Hanya untuk re-iterate, segala sesuatu yang saya've mengatakan pada link pesan kesalahan menyediakan untuk anda.
Berlari ke dalam masalah yang sama diriku sendiri, tapi saya controller definisi yang tampak sedikit berbeda dari yang di atas. Untuk pengendali didefinisikan seperti ini:
function MyController($scope, $http) {
// ...
}
Hanya menambahkan satu baris setelah deklarasi yang menunjukkan benda-benda untuk menyuntikkan ketika controller instantiated:
function MyController($scope, $http) {
// ...
}
MyController.$inject = ['$scope', '$http'];
Hal ini membuat minification-aman.
Masalah ini terjadi ketika controller atau direktif yang tidak ditentukan sebagai array dari ketergantungan dan fungsi. Misalnya
angular.module("appName").directive('directiveName', function () {
return {
restrict: 'AE',
templateUrl: 'calender.html',
controller: function ($scope) {
$scope.selectThisOption = function () {
// some code
};
}
};
});
Ketika minified Yang '$scope' diteruskan ke controller fungsi diganti dengan satu huruf nama variabel . Ini akan membuat sudut mengerti dari ketergantungan . Untuk menghindari hal ini lulus ketergantungan nama bersama dengan fungsi sebagai array.
angular.module("appName").directive('directiveName', function () {
return {
restrict: 'AE',
templateUrl: 'calender.html'
controller: ['$scope', function ($scope) {
$scope.selectThisOption = function () {
// some code
};
}]
};
});
Jika anda memiliki file terpisah untuk sudut app\resources\arahan dan hal-hal lain maka anda hanya dapat menonaktifkan minification dari sudut bundel aplikasi seperti ini (menggunakan Bundel baru() bukan ScriptBundle() dalam bundel anda config):
bundles.Add(
new Bundle("~/bundles/angular/SomeBundleName").Include(
"~/Content/js/angular/Pages/Web/MainPage/angularApi.js",
"~/Content/js/angular/Pages/Web/MainPage/angularApp.js",
"~/Content/js/angular/Pages/Web/MainPage/angularCtrl.js"));
Dan sudut aplikasi akan muncul dalam bundel dimodifikasi.
Jika anda memiliki file terpisah untuk sudut app\resources\arahan dan hal-hal lain maka anda hanya dapat menonaktifkan minification dari sudut bundel aplikasi seperti ini (menggunakan Bundel baru() bukan ScriptBundle() dalam bundel anda config):
Aku punya masalah yang sama tapi masalah yang berbeda, saya mencoba untuk membuat layanan dan pass $ruang lingkup untuk itu sebagai parameter. Yang's cara lain untuk mendapatkan error ini sebagai dokumentasi dari link yang mengatakan:
Mencoba untuk menyuntikkan lingkup objek menjadi sesuatu yang's tidak kontroler atau direktif, misalnya layanan, juga akan membuang aplikasi yang tidak Diketahui penyedia: $scopeProvider <- $ruang lingkup kesalahan. Ini mungkin terjadi jika seseorang keliru register controller sebagai layanan, ex.:
angular.module('myModule', [])
.service('MyController', ['$scope', function($scope) {
// This controller throws an unknown provider error because
// a scope object cannot be injected into a service.
}]);