【问题标题】:Angular controller function is not recognized in CoffeeScriptCoffeeScript 无法识别 Angular 控制器功能
【发布时间】:2016-05-26 19:06:15
【问题描述】:

我对 Angular + CoffeeScript 相当陌生,并且正在将它用于 Rails 项目。我正在尝试在控制器中创建一个函数,如果我在视图中点击一个按钮,该函数就会运行。

这是html

<div id="labs">
  <div class="clients" ng-repeat="client in clients" ng-class="{first: $index == 0}">
    <h1>{{client.name}}</h1>
    <div class="labs">
      <ul>
        <li ng-repeat="lab in client.labs">
          <a ng-href="/#!/labs/{{lab.id}}/process">
            <button ng-click = "test()">Test</button>
            <span>{{lab.name}}</span>
            <span>{{lab.created_at | date:'MMMM yyyy' }}</span>
          </a>
        </li>
      </ul>
    </div>
  </div>
</div>

这是控制器

angular.module("deloitte").controller('labsCtrl', ['$scope', 'labService','labPreferencesService', ($scope, labService, labPreferencesService ) ->  

  labService.query (data) ->
    $scope.clients = data
   # console.print (clients)

       $scope.test -> console.log("Hello!");
])

这就是错误

angular.js?body=1:5755 TypeError: $scope.test is not a function
    at new <anonymous> (labsController.js?body=1:7)
    at invoke (angular.js?body=1:2903)
    at Object.instantiate (angular.js?body=1:2915)
    at angular.js?body=1:4806
    at update (angular.js?body=1:14199)
    at Object.Scope.$broadcast (angular.js?body=1:8308)
    at angular.js?body=1:7464
    at wrappedCallback (angular.js?body=1:6847)
    at wrappedCallback (angular.js?body=1:6847)
    at angular.js?body=1:6884

我查了一下语法,似乎是正确的。执行 =-> 也会引发错误。帮助将不胜感激

【问题讨论】:

  • 您的缩进不正确。 CS 中的随机缩进会导致问题。
  • 另外,它写的没有意义,你需要assign来测试;您没有在控制器中传递 test 函数。

标签: javascript ruby-on-rails angularjs coffeescript


【解决方案1】:

你想在你的$scope 上调用.test() 函数还是定义它?

$scope.test -> console.log("Hello!");

// Generates
$scope.test(function() {
  return console.log("Hello!");
});

如果你想定义/分配:

$scope.test = -> console.log("Hello!");

// Generates
$scope.test = function() {
  return console.log("Hello!");
};

这可能就是你想要的。

【讨论】:

  • 你好乌兹别克洪!正如我在帖子中所说 - 它会用等号和箭头引发错误。我不确定这是否是因为它的导轨。虽然我了解咖啡脚本教程概述了上述方法。
  • 如果要加参数怎么办?
  • @Shashank 添加参数。
  • 你能在你的问题中添加渲染的 js 代码吗?如果你想传递一个参数,只需添加它:$scope.test = (param)-&gt; console.log("Hello #{param}!");。 PS。正如@DaveNewton 正确指出的那样,使用一致的缩进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 2016-05-30
  • 1970-01-01
相关资源
最近更新 更多