2016-04-13 3 views
1

Я реализованного lodash двумя способами:Lodash _.findIndex не работает в ТСД установке lodash --save в angular2

Метод 1: Я Установить в bower_component и сделать declare var _:any; компонентами. Его работает отлично

В случае щелчка я зову эту функцию:

checkLodash(){ 
     _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { 
      console.log(key); 
     }); 


     let a = _.findIndex(this.users, 'active'); 
     console.log(a) 
    } 

Все работает отлично. но я получил этот вопрос в производстве

EXCEPTION: ReferenceError: _ is not defined 

я получил какое-то решение отсюда [Lodash in angular2, declare var_:any not working

Способ 2: В моем приложении нет systemjs, потому что я использую [семя приложение] [1 ], так что я использовал
tsd install lodash --save и

import * as _ from 'lodash'; 

Я называю эту функцию в мыши даже т

constructor() { 
     this.show_data = "hello"; 
     this.users = [ 
      { 'user': 'barney', 'active': false }, 
      { 'user': 'fred', 'active': false }, 
      { 'user': 'pebbles', 'active': true } 
     ]; 
     _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { 
      console.log(key); 
     }); 
    } 

    checkLodash() { 
     _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { 
      console.log(key); 
     }); 


     let a = _.findIndex(this.users, 'active'); 
     console.log(a) 
    } 

Теперь мой выход: б (в console.log) Если я нажимаю кнопку, чтобы вызвать функцию checkLodash, я получаю эту ошибку,

EXCEPTION: Error during evaluation of "click" 
ORIGINAL EXCEPTION: TypeError: _.findIndex is not a function 
browser_adapter.js:76 TypeError: _.findIndex is not a function 
    at LodashWithoutDeclare.checkLodash (lodash-without-declare.ts:31) 
    at AbstractChangeDetector.ChangeDetector_LodashWithoutDeclare_0.handleEventInternal (viewFactory_LodashWithoutDeclare:75) 
    at AbstractChangeDetector.handleEvent (abstract_change_detector.js:57) 
    at AppView.triggerEventHandlers (view.js:221) 
    at eval (viewFactory_LodashWithoutDeclare:130) 
    at dom_renderer.js:282 
    at dom_events.js:28 
    at ZoneDelegate.invoke (angular2-polyfills.js:332) 
    at Object.NgZoneImpl.inner.inner.fork.onInvoke (ng_zone_impl.js:44) 
    at ZoneDelegate.invoke (angular2-polyfills.js:331) 

Как исправить Эта проблема?

ответ

0

Проверьте свой дистрибутив lodash, я думаю, его не полная сборка, просто ядро.

+0

да он не обновил код. это старая версия, я так думаю –

0

tsd лишен. Используйте этот способ

npm install lodash --save 
typings install lodash --ambient --save 

до этого убедитесь, что вы установите типизации глобально

npm install typings -g 

Затем в угловом-CLI-build.json, убедитесь, что он остается, как таким образом

module.exports = function(defaults) { 
    return new Angular2App(defaults, { 
    vendorNpmFiles: [ 
     ... 
     'lodash/**/*.js' 
    ] 
    }); 
}; 

и в вашей системе-config.ts:

/** Map relative paths to URLs. */ 
const map: any = { 
    'lodash': 'vendor/lodash/lodash.js' 
}; 

/** User packages configuration. */ 
const packages: any = { 
    'lodash': { 
    format: 'cjs' 
    } 
}; 

в вашем ЦСИ/index.html добавить эту строку

<script src="/vendor/lodash/lodash.js" type="text/javascript"></script> 

теперь в вашем компоненте, где вы хотите использовать lodash, написать этот путь

declare var _:any; 

@Component({ 
}) 
export class YourComponent { 
    ngOnInit() { 
    console.log(_.chunk(['a', 'b', 'c', 'd'], 2)); 
    } 
} 

он работал для меня :)

Смежные вопросы