我目前正在与一家拥有大型角度基础设施的公司合作,在这里,我花了两天时间完成了一项任务,标记为:“在菜单上添加新链接”。
正如我所说,我必须在菜单中“添加一个链接”,但该链接必须在特定环境中打开一个带有特定页面的新窗口(想想:打开一个包含债务历史记录的页面我们正在观看的特定客户)
要调用此页面,我需要向特定的ActionBean发帖(不要问为什么。我不知道。遗留代码很大,我是一个没有决策权的简单士兵)。经过大量的努力,我可以认为公司在AngularJs中有一个库来创建这个“帖子”请求。简化定义将是:
angular.module('myApp.formBuilder', []).factory('myAppFormBuilder', ['MyAppPleaseWaitModal', function (myAppPleaseWaitModal) {
function FormBuilder(url, method) {
this.$form = $('<form />').prop({
action: url,
method: method || 'post'
});
}
FormBuilder.prototype.add = function (name, value) { .. }
FormBuilder.prototype.submit = function () { .. }
return {
/**
* Creates a new builder
*
* @param url
* @param [method]
* @return {FormBuilder}
*/
create: function (url, method) {
return new FormBuilder(url, method);
}
};
以及使用它的方式(基于其他页面中的先前代码)
define(['angular', 'lodash'], function (angular, _) {
var module = angular.module('somethingController', ['myapp.formBuilder']);
module.controller('SomethingController', ['$scope', '$timeout', 'myappPleaseWaitModal', 'myappFormBuilder',
function ($scope, $timeout, myappFormBuilder) {
$scope.goToDamnPage = function () {
myappFormBuilder
.create(CONTEXT_PATH + "/app/ClientOverview.action")
.add('id', $scope.client.Id)
.target("_blank")
.submit();
};
// other stuff
}]);
最后,视图有了这个
<li> <a href="javascript:void(0)" id="goToDamnPageBtn" ng-click="goToDamnPage()" >Damn Page<span class="glyphicon glyphicon-share"></span></a></li>
当我点击链接时,我收到一个丑陋的错误:错误:myappFormBuilder.create不是函数
指向angular.js上的以下行的指针
我怀疑我需要一些引用,因为显然不知道myappFormBuilder.create返回一个函数,但我可能无法弄清楚它是哪一个。我怀疑任何有经验的有角度的开发人员都可以立即发现......这很愚蠢......遗憾的是,我对这项技术太新了
我最好的问候和提前感谢
答案 0 :(得分:0)
您需要在函数中包含 myappPleaseWaitModal ,因为您已在控制器定义中的数组中以相同的顺序传递它。
这将解决问题:
module.controller('SomethingController', ['$scope', '$timeout', 'myappPleaseWaitModal', 'myappFormBuilder',
function ($scope, $timeout,myappPleaseWaitModal, myappFormBuilder) {
}]);
原因:当您在定义控制器时提及阵列中的特定依赖序列时,angular也希望您在控制器函数中具有相同的序列。
因为在你的情况下序列不正确,有角度的'myappFormBuilder'是'myappPleaseWaitModal'。
这就是它说它不是一个功能的原因。
答案 1 :(得分:0)
你没有在控制器功能中声明'myappPleaseWaitModal'
module.controller('SomethingController', ['$scope', '$timeout', 'myappPleaseWaitModal', 'myappFormBuilder',
function ($scope, $timeout, myappPleaseWaitModal,myappFormBuilder) {
使用此
而不是
module.controller('SomethingController', ['$scope', '$timeout', 'myappPleaseWaitModal', 'myappFormBuilder',
function ($scope, $timeout, myappFormBuilder) {