函数 foo(param) alert("foo 调用"); 和 $scope.foo = function(param)alert("foo");;

Posted

技术标签:

【中文标题】函数 foo(param) alert("foo 调用"); 和 $scope.foo = function(param)alert("foo");;【英文标题】:function foo(param) alert("foo called"); and $scope.foo = function(param)alert("foo");;函数 foo(param) alert("foo 调用"); 和 $scope.foo = function(param)alert("foo");; 【发布时间】:2014-11-09 19:00:13 【问题描述】:

我想我在使用 AngularJS 时遇到了类似的问题,就像许多其他人一样。 我正在修复以前的错误消息(我无法调用 测试描述块中的控制器功能)并获得了新的 错误。

错误:[ng:areq] 参数 'fooController' 不是函数,未定义

我已经阅读了其他帖子,但仍然无法更正。

所以我的控制器就像..

'use strict';

var app = angular.module('MyApp', ['MyAppControllers']);
var appControllers = angular.module('MyAppControllers', []);

appControllers.controller('fooController', ['$scope', function ($scope) 
function foo(param) 
    alert("foo called");

]);

我的控制器规格是..

'use strict';

describe('fooController', function () 
    var $scope, $controller;

    beforeEach(inject(function ($rootScope, $controller) 
        $scope = $rootScope.$new();
        ctrl = $controller('fooController',  $scope: $scope );
    ));

    it("should write foo called", function () 
        $scope.foo();
   );
);

为什么老是说 fooController 不是函数??

谢谢大家。

旧帖已编辑。请您阅读底部的帖子(我的新问题?:))

【问题讨论】:

【参考方案1】:

更换控制器

appControllers.controller('fooController', ['$scope', function ($scope) 

//add your function within scope
$scope.foo = function()
 alert("foo called");

]);

【讨论】:

因为'使用严格';我不能。还有其他方法吗? 我试图杀死'use strict';并遵循建议。仍然出现同样的错误。【参考方案2】:

好吧。我傻了。描述后我没放。

所以我现在解决了这个问题:

'use strict';

describe('fooController', function () 
    **beforeEach(module('MyApp'))**;
    var $scope, ctrl;

    beforeEach(inject(function ($rootScope, $controller) 
        $scope = $rootScope.$new();
        ctrl = $controller('fooController',  $scope: $scope );
    ));

    it("should write foo called", function () 
        $scope.foo("aa");
    );
);

和控制器..

'use strict';

var app = angular.module('MyApp', ['MyAppControllers']);

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

appControllers.controller('fooController', ['$scope', function ($scope) 
    function foo(param) 
        alert("foo called");
    
]);

如果可以的话,我现在想问一下我原来的问题。

问题是从控制器规范的测试块中看不到函数 foo TypeError: undefined is not a function

我看到一个帖子说函数是私有的,应该把函数变成l

$scope.foo = function(param)alert("foo");;

但是 'use strict' 禁止像上面这样的转动功能。

我想知道其他人是如何解决这个问题的?

再次感谢您。

【讨论】:

好吧,你可以使用 '$scope.foo = function(param)alert("foo");;' 'use strict' 下的这一行。我仍然不知道之前是什么阻止了这种情况。

以上是关于函数 foo(param) alert("foo 调用"); 和 $scope.foo = function(param)alert("foo");;的主要内容,如果未能解决你的问题,请参考以下文章

轮播插件unsilder 源码解析--之jquey的深入

调用 Rust 初始化函数时出现“无法反序列化合约状态”

JavaScript一些重要知识点结合题目的表现!

匿名函数的作用域

浅谈this指向问题

JS之call/apply/bind