AngularJS新手求助:Factory调用Controller失败问题排查
AngularJS: 无法在Controller中调用Factory方法的问题排查与修复
嘿,我来帮你梳理下这段代码里的问题,都是些容易忽略的小细节,咱们一个个解决:
问题1:Factory错误使用$scope
Factory属于Angular的服务类,根本不能直接访问$scope——$scope是Controller专属的作用域对象。你在myFactory的getsum函数里试图给$scope.service赋值,这完全不符合Angular的设计逻辑,Factory只负责处理业务逻辑、返回数据,不该直接操作Controller的作用域。
问题2:getsum函数没有返回值
你定义的getsum函数只是尝试赋值,但没有返回任何内容,导致Controller调用myFactory.getsum()时得到的是undefined,自然没法把值传给$scope.service。
问题3:HTML里的两处语法错误
- 控制器名称写错:JS里定义的是
helloController,但HTML里写成了hello controller(中间多了空格),Angular根本找不到对应的控制器。 - ng-click未触发函数:
ng-click="clickme"要改成ng-click="clickme()",否则点击按钮不会执行函数。
问题4:路由代码的语法冗余
你的路由配置最后多了一个}),会导致语法错误,影响整个应用初始化,得删掉。
修正后的完整代码
JS代码
app.factory("myFactory",function(){ var something = {}; something.getsum = function() { // 直接返回需要的数据,不操作$scope return "hello people"; } return something; }); app.controller("helloController", function($scope,myFactory) { $scope.clickme = function() { $scope.service = myFactory.getsum(); } });
HTML代码
<div ng-controller="helloController"> <button ng-click="clickme()">点击显示内容</button> <h2>{{service}}</h2> </div>
路由配置代码
$urlRouterProvider.otherwise("/index/utilise"); $stateProvider .state('index', { abstract: true, url: "/index", templateUrl: "display.html", controller:'mainController', controllerAs: "parentCtrl", }) .state('index.sample', { url: "/home", templateUrl: "content/sample.html", }) .state('index.utilise', { url: "/utilise", templateUrl: "content/utilise.html", });
这样修改后,点击按钮就会调用Factory的getsum方法,把返回的字符串赋值给$scope.service,页面上的{{service}}就会正常显示内容啦~
内容的提问来源于stack exchange,提问作者ronaldino
相关产品推荐
相关产品推荐

