2017-06-15 39 views
0

請指導我如何在沒有工廠的情況下將下劃線注入控制器。AngularJS:如何在沒有工廠的情況下將下劃線注入控制器

與工廠我的代碼示例正在運行....在這裏。

var myApp = angular.module('myApp', []); 

myApp.factory('_', function() { 
    return window._; //Underscore should be loaded on the page 
}); 


myApp.controller('MainCtrl', function ($scope, _) { 

}); 

但沒有工廠當我嘗試在控制器然後得到錯誤注入下劃線如下

SyntaxError: missing) after argument list Error: [$injector:modulerr] Failed to instantiate module myApp due to: [$injector:nomod] Module 'myApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

這裏是沒有出廠注入下劃線到控制器中的代碼。

<div ng-app="myApp" ng-controller="MainCtrl"> 

</div> 

var myApp = angular.module('myApp' , ['underscore']); 

myApp.controller('MyCtrl', function ($scope, _) 
{ 
    $scope.awesomeThings = [ 
     'HTML5 Boilerplate', 
     'AngularJS2', 
     'AngularJS1' 
    ]; 

    var x = _.last($scope.awesomeThings, 2); 
    _.each(x.reverse(), alert);  
}); 

我錯過了一些東西....請告訴我我需要糾正的代碼。謝謝

回答

1

依賴注入應該只能用於有角的東西(服務,控制器,...)。

與角度無關的所有內容不應與依賴注入一起使用。

只要下劃線在你的角度控制器之前加載,你可以使用它,因爲它將被添加到窗口對象。

下面的工作沒有任何問題:

var myApp = angular.module('myApp' , []); 

myApp.controller('MyCtrl', function ($scope) 
{ 
    $scope.awesomeThings = [ 
     'HTML5 Boilerplate', 
     'AngularJS2', 
     'AngularJS1' 
    ]; 

    var x = _.last($scope.awesomeThings, 2); 
    _.each(x.reverse(), alert);  
}); 
+0

看我複製你的代碼,但不工作在這裏是jsfiddle https://jsfiddle.net/tridip/3emgttcg/1/ –

+0

我在這裏使用了不同名稱的控制器,我修復了這個問題,代碼工作時沒有注入下劃線。這裏是js小提琴版本https://jsfiddle.net/tridip/3emgttcg/2/ –

2

,你可以創建一個單獨的模塊下劃線這樣

var underscore = angular.module('underscore', []); 
underscore.factory('_', ['$window', function($window) { 
    return $window._; // assumes underscore has already been loaded on the page 
}]); 

現在注入下劃線模塊到你的應用程序模塊

var myApp = angular.module('myApp' , ['underscore']); 

myApp.controller('MyCtrl', function ($scope, _) 
{ 
    $scope.awesomeThings = [ 
     'HTML5 Boilerplate', 
     'AngularJS2', 
     'AngularJS1' 
    ]; 

    var x = _.last($scope.awesomeThings, 2); 
    _.each(x.reverse(), alert);  
}); 
+0

我已經說過我想直接將下劃線注入到控制器中,而不是通過工廠樣本進行。我的第一個示例顯示瞭如何通過工廠樣本注入下劃線,但看到我的第二個示例,我嘗試直接注入而不是工廠。 –

+0

@MonojitSarkar這是DI的工作原理。爲了注入某些東西,你應該首先定義它。你不能直接注入它。 – estus

+0

是你的控制器名稱應該是'MainCtrl'還是'MyCtrl'? –

相關問題