【问题标题】:When try to call function from Controller it doesn't respond当尝试从控制器调用函数时它没有响应
【发布时间】:2015-04-21 13:27:27
【问题描述】:

我正在尝试从其他 javascript 文件调用我的jointController 中的一个函数。

var app1 = angular.module('jointApp',[]);
var createStateBox = function(label,color){

var state = new uml.State({
    position: {x: 0, y: 0},
    size: {width: 200, height: 100},
    name: "<<"+label+">>",
    events: [label+" box"],
    attrs:{rect:{fill:color},path:{"stroke-width":0}}

});
app1.controller('jointController', function($scope) {
    $scope.setDecision(state);
    alert("This is reached");
});
    paper.model.addCell(state);
}

这是jointMod.js中包含jointController的代码

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

function JointController($scope, $http, $filter) {

    $scope.list = [];

    $scope.newMsg = 'hello';
    $scope.newDecision;

    $scope.setMsg = function(msg) {
        $scope.newMsg = msg;
    }

    $scope.sendPost = function() {
        var data = $.param({
        json: JSON.stringify({
            msg: $scope.newMsg
            })
         });

    $scope.setDecision = function(decision){
        $scope.newDecision = decision;
        alert("one two one two")
        console.log(decision);
    }

    $http({
        method: 'POST',
        url: 'http://213.65.171.121:3000/decision',
        data: $scope.newMsg,
        headers: {'Content-Type': 'application/x-www-form-urlencoded'},
        transformRequest: function(obj) {
            var str = [];
            str.push(encodeURIComponent("action") + "=" + encodeURIComponent(obj));
            return str.join("&");
        }
    }).success(function(data, status, header, config) {
                $scope.list.push(status);
        }).error(function(data, status, header, config) {
                $scope.list.push(status);
        });
    };
};

我在那里有警报和控制台登录,以确保他们是否可以到达,但他们没有响应。

【问题讨论】:

  • 你想将第一个 $scope 用于第二个控制器吗?
  • 好吧,现在我明白我做错了什么,但是如何在第一个代码中使用第二个控制器的 $scope?(我只想使用第二个控制器)
  • 我想我需要更新我的问题:我知道我没有以正确的方式创建控制器,并且在第一部分代码中我犯了一个错误来创建不同的模块和控制器。但我想问的问题是。是否可以从其他 javascript 文件(不是 html)调用位于 javascript 文件中的控制器的函数,如果可能,您是如何做到的

标签: javascript angularjs jointjs


【解决方案1】:

您提供的代码不会像您想象的那样运行。如果两者一起使用,至少不会。

两个代码都引入了一个新模块jointApp,实际上只有第一个定义了一个控制器。该控制器的$scope 与您的第二个代码中的功能不同。

如果您想从控制器外部调用方法,请查看 Angular 中的事件。这将是存档的最佳方式。您还可以使用虚拟对象并对其进行双向绑定 (scope: { dummy: '=' }),然后从其他代码部分调用您在指令中在该对象上创建的方法。

看看这个演示这两种方法的 plnkr。

http://plnkr.co/edit/YdcB10UpXGqKAxYzXISL?p=preview

【讨论】:

  • 谢谢,我去看看,我希望第一个代码部分在第二个代码部分调用 $scope.setDecision 函数,可以吗?
  • 我添加了一个 plnkr 来演示这两种方法。
  • 您的两个代码部分目前不可组合。阅读有关模块以及如何定义控制器的角度文档。
  • 看看我的 plnkr 示例。它应该给你足够的线索从哪里开始。
  • 是的,我明白,但你给我的例子只显示了如何在 html 文件中调用控制器,现在我想要的是在 javascript(jointJS) 文件中调用它。这也是可能的吗?
猜你喜欢
  • 2015-05-28
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多