一尘不染

使用Yeoman应用程序中的Grunt Build缩小后出现角度“ Unknown Provider”错误

angularjs

gruntbuild在使用Yeoman生成的Angular应用程序(使用Coffee和Slim)时遇到问题,所有库都是最新的。(该应用程序是几天前使用最新生成器生成的。)

grunt buildgrunt server两个细初步制定。但是使用开发了几天后grunt server,我发现它gruntbuild已经完全停止工作了。

我解决了几个不同的问题。最大的问题是,我不得不完全放弃Slim来使用索引文件,而使用纯HTML,因为gruntbuild当它发布到时莫名其妙地删除了索引文件的80%/dist

不幸的是,在解决了几乎所有问题之后,我开始在我的Angular指令之一中收到此错误:

未捕获的错误:未知提供程序:aProvider <-a

问题似乎在于丑陋。我认为这可能与此处报告的问题相同,但我不确定。我尝试了多种解决方案,但对我而言唯一有效的方法是从我的coffeescript手动生成干净的js文件,将文件复制到中/dist,然后将路径写入中dist/index.html

显然,这不是最佳选择。我敢肯定,在Grunt中有一种更整洁的方法(可能是从构建过程中完全删除了缩小内容,就像其他用户在上面的链接中所做的那样),但是我是新手,还没有弄清楚如何做要做到这一点。无论哪种方式,这都是一种解决方法。

我的Gruntfile很基本:我只向默认文件添加了grunt-connect-proxy,grunt-contrib-sass和grunt-
slim。实际上,我试图引入一个干净的,新生成的Gruntfile,但是它并没有更好的构建。

失败的指令如下。错误实际上出现在控制器的第一行$scope.showInput = false。令人沮丧的是,一切都在中运行良好gruntserver。虽然我建立的那一刻,它完全崩溃了。

myModule.directive "editable", ->

  controller = ($scope) ->
    $scope.showInput = false

    $scope.saveContent = -> 
      $scope.toggleContent()
      $scope.save()

  linker = (scope, element, attrs) ->    
    scope.toggleContent = -> 
      scope.showInput = not scope.showInput
      setTimeout((-> element.find('input').focus()), 100)

  return DDO = 
    restrict: 'E'
    controller: controller
    link: linker
    templateUrl: "template/editable.html"
    scope:
      editableType: "@"
      text: "="
      placeholder: "@"
      save: "&"

(模板并不是很重要。它只有一个ng-switch可以使用切换的模板$scope.showInput。)

如果有人有任何建议,我将不胜感激。


阅读 170

收藏
2020-07-04

共1个答案

一尘不染

这听起来像是Angular依赖于依赖项注入参数名称的常见问题。确保在传递依赖项时,将依赖项名称包含为字符串,以便Angular知道缩小后要注入的内容(因为在缩小过程中不会更改字符串值)。

myApp.controller('myCtrl', ['$scope', '$http', function($scope, $http) {

}])

来自Angular文档: 有关缩小的说明

2020-07-04