GVKun编程网logo

Webpack和angularJs

8

在这里,我们将给大家分享关于Webpack和angularJs的知识,同时也会涉及到如何更有效地angular,webpack中的、angularjs–angular1.5组件模板webpackreq

在这里,我们将给大家分享关于Webpack和angularJs的知识,同时也会涉及到如何更有效地angular ,webpack 中的、angularjs – angular 1.5组件模板webpack require()导致错误、angularjs – Angular 2(4),Webpack站点将无法在IE 11中的服务器上运行、angularjs – angular.element($window).scrollTop()使用webpack抛出“不是函数”的内容。

本文目录一览:

Webpack和angularJs

Webpack和angularJs

我正在尝试使用angularjs和webpack运行简单的应用程序,这是我的代码:
index.html

<html ng-app="myApp">    <head>        <meta charset="utf-8">    </head>    <body ng-controller="mainCtrl">Full Name: {{firstName + " " + lastName}}        <script type="text/javascript" src="bundle.js" charset="utf-8"></script>    </body></html>

app.js

var app = angular.module(''myApp'', []);function mainCtrl($scope) {    $scope.firstName="John",    $scope.lastName="Doe"}

Webpackconfig.js

module.exports = {  entry: ''./main.js'',  output: {    filename: ''./bundle.js''         }};

main.js

var jquery = require("//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js");var angular = require("//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular.min.js");var app = require("./app.js");

bundle.js

?? I don''t know what i sholud write here !!

我也看到了这个:https :
//github.com/jeffling/angular-webpack-
example
问题是我如何正确运行?

答案1

小编典典

bundle.js 由webpack生成,因此我认为您无需编写此文件。

Webpack配置文件的正确名称是webpack.config.js。使用此文件后,您可以在修改代码时使用webpackwebpack--watch继续编译捆绑文件来启动编译。

我创建了一个angular-index.js将Angular包装为CommonJS模块。这是源代码:

require(''./angular.min.js'');module.exports = angular;

我已经将main.js‘app.js’ 合并到一个文件中

var jquery = require(''jquery'');var angular = require(''./angular-index'');var myApp = angular.module(''myApp'', []);myApp.controller(''mainCtrl'', require(''./mainCtrl''));

最后,我添加了mainCtrl.js。这只是控制器的功能定义。

module.exports = function($scope) {  $scope.firstName = ''John'';  $scope.lastName = ''Doe'';};

为了获得更好,更详细的说明,请阅读此博客文章https://blog.codecentric.de/en/2014/08/angularjs-
browserify/。我的工作代码在这里https://github.com/jean-rakotozafy/angular-webpack-
template

angular ,webpack 中的

angular ,webpack 中的

问题:使用angular-cli搭建的项目,执行ng build后,浏览器打开空白,发现文件的路径不对

解决方案: 在package.json文件的scripts中添加命令:

"build":"ng build --base-href ./"

在以下为Angular Cli的各个配置中修改

"deployUrl": "//cdn.com.cn", // 指定站点的部署地址,该值最终会赋给webpack的output.publicPath,常用于CDN部署

在webpack中 output.publicPath

以下为Angular Cli的各个配置项说明。

{
  "project": {
    "name": "angular-questionare",
    "ejected": false // 标记该应用是否已经执行过eject命令把webpack配置释放出来
  },
  "apps": [
    {
      "root": "src", // 源码根目录
      "outDir": "dist", // 编译后的输出目录,默认是dist/
      "assets": [ // 记录资源文件夹,构建时复制到`outDir`指定的目录
        "assets",
        "favicon.ico"
      ],
      "index": "index.html", // 指定首页文件,默认值是"index.html"
      "main": "main.ts", // 指定应用的入门文件
      "polyfills": "polyfills.ts", // 指定polyfill文件
      "test": "test.ts", // 指定测试入门文件
      "tsconfig": "tsconfig.app.json", // 指定tsconfig文件
      "testTsconfig": "tsconfig.spec.json", // 指定TypeScript单测脚本的tsconfig文件
      "prefix": "app", // 使用`ng generate`命令时,自动为selector元数据的值添加的前缀名
      "deployUrl": "//cdn.com.cn", // 指定站点的部署地址,该值最终会赋给webpack的output.publicPath,常用于CDN部署
      "styles": [ // 引入全局样式,构建时会打包进来,常用语第三方库引入的样式
        "styles.css"
      ],
      "scripts": [ // 引入全局脚本,构建时会打包进来,常用语第三方库引入的脚本
      ],
      "environmentSource": "environments/environment.ts", // 基础环境配置
      "environments": { // 子环境配置文件
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ],
  "e2e": {
    "protractor": {
      "config": "./protractor.conf.js"
    }
  },
  "lint": [
    {
      "project": "src/tsconfig.app.json"
    },
    {
      "project": "src/tsconfig.spec.json"
    },
    {
      "project": "e2e/tsconfig.e2e.json"
    }
  ],
  "test": {
    "karma": {
      "config": "./karma.conf.js"
    }
  },
  "defaults": { // 执行`ng generate`命令时的一些默认值
    "styleExt": "css", // 默认生成的样式文件后缀名
    "component": {
      "flat": false, // 生成组件时是否新建文件夹包装组件文件,默认为false(即新建文件夹)
      "spec": true, // 是否生成spec文件,默认为true
      "inlineStyle": false, // 新建时是否使用内联样式,默认为false
      "inlineTemplate": false, // 新建时是否使用内联模板,默认为false
      "viewEncapsulation": "Emulated", // 指定生成的组件的元数据viewEncapsulation的默认值
      "changeDetection": "OnPush", // 指定生成的组件的元数据changeDetection的默认值
    }
  }
}

angularjs – angular 1.5组件模板webpack require()导致错误

angularjs – angular 1.5组件模板webpack require()导致错误

我使用角度1.5.3与es6,webpack和玉石模板.

除组件的模板外,一切都按预期工作.

这有效

var cmpnt = {
    template: '<div>test</div>'
}

这也有效(当我手动创建html文件时)

var cmpnt = {
    template: require('./component.html')
}

这不起作用

var cmpnt = {
    template: require('./component.jade')
}

在浏览器控制台中,我得到了

错误:[$injector:unpr]未知提供者:localsProvider< - locals .jade文件存在,我在应用程序的许多其他位置使用require(‘./ template.jade’)没有问题. 有任何想法吗?我可以提供更多信息吗?

解决方法

jade-loader返回一个函数.您不能将该函数传递给模板,您必须在传递之前调用该函数

var cmpnt = {
    template: require('./component.jade')();
}

请注意require之后的函数调用

angularjs – Angular 2(4),Webpack站点将无法在IE 11中的服务器上运行

angularjs – Angular 2(4),Webpack站点将无法在IE 11中的服务器上运行

在角度或webpack中是否有一些特殊的IE开关,因为当我在 http://localhost:port/上运行我的网站时,它可以工作.此外,当我在Edge或Chrome上的服务器 http://server.domain/mysite/上运行它时,它可以工作.但是当我在IE 11上打开它(兼容模式设置为11)时,我在控制台中收到以下错误:

未处理的Promise拒绝:无法加载函数t(t){var e = this; this.http = t,this.getItems = function(){e.results = null,e.http.get(“api / app / components /my-items.component.html; Zone :;任务:Promise.then;值:无法加载函数t(t){var e = this; this.http = t,this.getItems = function(){e. results = null,e.http.get(“api / app / components / my-items.component.html undefined

对我来说意味着什么的唯一部分是’api /’是完全错误的,并且我已经仔细检查了组件,它清楚地说:

@Component({
    selector: 'my-items',templateUrl: 'app/components/my-items.component.html'
})
export class MyItemsComponent implements OnInit { ...

整个解决方案中没有出现短语’api / app'(包括c#,ts,css,html和js文件)

我的webpack.config.js很简单:

/// <binding ProjectOpened='Watch - Development' />
var path = require('path');
var webpack = require('webpack');
var console = require('console');


module.exports = {
    context: path.join(__dirname,'wwwroot'),//vendor: ['libs/@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js'],entry: './app/main.js',output: {
        path: path.join(__dirname,'wwwroot/built'),filename: '[name].bundle.js',},plugins: [
            //new webpack.optimize.CommonsChunkPlugin("vendor","vendor.bundle.js"),// split vendor js into its own file
    new webpack.optimize.CommonsChunkPlugin({
      name: 'vendor',minChunks: function (module,count) {
          // any required modules inside node_modules are extracted to vendor
          var path = module.resource.replace(/\\/g,'/');

          return (/\.js$/.test(path) && (path.indexOf('node_modules/') >= 0 || path.indexOf('libs/') >= 0));
      }

};

这里发生了什么?

解决方法

我使用2.0.0-rc.1和webpack遇到了同样的问题.在阅读了一些 issues之后,我的解决方案是在浏览器是IE时在我的index.html上包含以下脚本:

es6-shim.min.js
system-polyfills.js
shims_for_IE.js

前两个可以在node_modules中找到,我从here下载了第三个.

angularjs – angular.element($window).scrollTop()使用webpack抛出“不是函数”

angularjs – angular.element($window).scrollTop()使用webpack抛出“不是函数”

我正在使用 Angularjs进行前端开发.最近我开始实现Webpack然后我意识到angular.element($window).scrollTop()停止工作并开始抛出错误,因为“windowElement.width不是函数”.以下是旧代码和webpack的新代码.

旧工作代码:

app.directive("ajnav",['$window','$location',function ($window,$location) {
        return {
            restrict: "E",templateUrl: "/templates/common/AJNav.html",replace: true,scope: {
                SEO: '=',conf: '='
            },link: function (scope,element,attrs) {
                //Bind event change the postion of AJ Nav on scroll
                var windowElement = angular.element($window);
                var onScrollHandler = function () {                    
                    //Get current height of iNav.
                    var iNavHeight = $("#iNavNGI_Header").height();
                    if (windowElement.scrollTop() > iNavHeight) {
                        $(element).addClass('navbar-fixed-top');
                        $(element).removeClass('aj-nav-container-absolute');
                    }
                    else {
                        $(element).removeClass('navbar-fixed-top');
                        $(element).addClass('aj-nav-container-absolute');
                    }
                };
                //Bind event handler on scroll
                windowElement.on('scroll',scope.$apply.bind(scope,onScrollHandler));                
            }

        };
    }]);

使用webpack的新代码抛出错误:

var $= require("jquery");
var angular = require("angular");
var Utilities = require("./../../utilities/Utilities");
var AppUtilities = require("./../../utilities/AppUtilities"); 
module.exports = ['$window',attrs) {
                //Bind event change the postion of AJ Nav on scroll
                var windowElement = angular.element($window);
                var onScrollHandler = function () {
                    //Get current height of iNav.
                    var iNavHeight = $("#iNavNGI_Header").height();
                    if (windowElement.scrollTop() > iNavHeight) {
                        $(element).addClass('navbar-fixed-top');
                        $(element).removeClass('aj-nav-container-absolute');
                    }
                    else {
                        $(element).removeClass('navbar-fixed-top');
                        $(element).addClass('aj-nav-container-absolute');
                    }
                };
                //Bind event handler on scroll
                windowElement.on('scroll',onScrollHandler));                
            }

        };
    }];

Follownig是我得到的异常的堆栈跟踪.

TypeError: windowElement.scrollTop is not a function
    at module.exports.link.onScrollHandler (site.min.js:42181)
    at Scope.$get.Scope.$eval (ite.min.js:25066)
    at Scope.$get.Scope.$apply (site.min.js:25165)
    at eventHandler (site.min.js:12594)

我在我的条目App.js中绑定了这个指令,如下所示

app.directive("ajnav",require("./directives/common/AJNav"));

我尝试了所有可能的选项,但无法修复它.请帮忙.

解决方法

scrollTop函数是由jquery添加的,你必须在angular之后加载jquery.在这种情况下,您不会将$.fn函数添加到angular.element实例中.在这种情况下你也可以做$.fn.scrollTop.call($window).或$($window).scrollTop()或在角度之前加载jquery,以便您当前的代码按原样运行.

侧注:你不必做$(元素),元素已经是jq(lite / query)包装,它已经有了add / removeClass函数.

关于Webpack和angularJs的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于angular ,webpack 中的、angularjs – angular 1.5组件模板webpack require()导致错误、angularjs – Angular 2(4),Webpack站点将无法在IE 11中的服务器上运行、angularjs – angular.element($window).scrollTop()使用webpack抛出“不是函数”等相关知识的信息别忘了在本站进行查找喔。

本文标签: