首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获得角度JS,要求JS & Framework 7协同工作

获得角度JS,要求JS & Framework 7协同工作
EN

Stack Overflow用户
提问于 2014-08-11 09:20:13
回答 1查看 2.7K关注 0票数 2

我正在尝试使用角JS、RequireJS &Framework7创建一个种子应用程序。到目前为止,我已经创建了以下文件夹结构。

我的主文件夹如下所示:

我的脚本文件夹是这样的:

我的图书馆是:

我能够正确地查看->控制器流。但是,当我试图向控制器注入一个服务对象时,我会得到以下错误。

我肯定我错过了什么。我给出了下面的代码:

要求-主要:

代码语言:javascript
复制
(function() {
require.config({
    baseUrl: "scripts",    

    // alias libraries paths
    paths: {
        'angular': '../libs/angular',
        'angular-route': '../libs/angular-route',
        'angular-animate':'../libs/angular-animate',
        'angularAMD': '../libs/angularAMD.min',
        'Framework7':'../libs/framework7',
        'UserController':'controller/UserCtrl',
        'WebCallManager':'services/WebCallManager'
    },

    // Add angular modules that does not support AMD out of the box, put it in a shim
    shim: { 
        'angularAMD': ['angular'],
        'angular-route': ['angular'],
        'angular-animate':['angular'],
        'Framework7':{exports: 'Framework7'}
    },

    //kick start application
    deps: ['app']
});

require(['Framework7'], function(Framework7) {

     f7 = new Framework7({
        modalTitle: 'Seed App',
        swipePanel: 'left',
        animateNavBackIcon: true
    });

    return {
        f7: f7
    };
});

 })();

app.js:

代码语言:javascript
复制
define(['angularAMD', 'angular-route','angular-animate'], function (angularAMD) {
var app = angular.module("app", ['ngRoute','ngAnimate']);

app.config(function ($routeProvider) {

    $routeProvider.when("/", angularAMD.route({ templateUrl: '../pages/login.html',controller: 'UserController'}));
    $routeProvider.when("/login", angularAMD.route({ templateUrl: '../pages/home.html', controller: 'UserController'}));
});
angularAMD.bootstrap(app);
return app;
});

UserController:

代码语言:javascript
复制
define(['app'], function (app) {
app.register.controller('UserController', function ($scope,$location,webcallService) {

    $scope.loginUser = function(){
        console.log("Login User Called...");
        $location.path('/login').replace();
        console.log("View Navigated...");
    };


    $scope.slidePanel = function(){
         f7.openPanel('left');
    };


    $scope.doWebCall = function(){
        console.log("Doing the Web Call...");
        webcallService.sendGetRequest();
    };
});
 });

WebCallManager.js (服务)

代码语言:javascript
复制
define(['app'], function (app) {
app.service('webcallService', function() {
    var self = this;
    self.sendGetRequest = function() {
        console.log("Sending HTTP Get Request");
    }

    self.sendPostRequest = function() {
        console.log("Sending HTTP Post Request");
    }
});
 });

我的页面:

index.html:

代码语言:javascript
复制
<!DOCTYPE html>
<html>
<head>
<script data-main="scripts/main" src="libs/require.js"></script>
</head>
<body>
<div>
    <div class="slide-animation page-content" ng-view ></div>
</div>
</body>
</html>

login.html:

代码语言:javascript
复制
<div class="content-block login-input-content">
<div class="store-data list-block">
    <div>
        <input type="text" class="login-name" placeholder="Username">
    </div>
    <div>
        <input type="password" class="password" placeholder="Password">
    </div>
    <a class="multi-language" href="#"><i class="icon ios7-world-outline"></i><span>english</span></a>
     </div>    
     </div>

     <div class="content-block login-btn-content">
     <button ng-click="loginUser()" class="button button-big button-submit login-submit">Login</button>
     </div>

Home.html:

代码语言:javascript
复制
<div>
 <h3>Welcome to Mobility In Angular-JS</h3>
<div class="content-block login-btn-content">
    <button ng-click="doWebCall()" class="button button-big button-submit login-submit">Send Get</button>
    <br/><br/>
    <button ng-click="doWebCall()" class="button button-big button-submit login-submit">Send Post</button>
</div>

有人能帮我吗?YOu还可以下载并运行整个项目这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-11 09:28:56

您正在将服务注册为webcallService

代码语言:javascript
复制
app.service('webcallService',  function() {

但是将$webcallService注入控制器:

代码语言:javascript
复制
app.register.controller('UserController', function ($scope, $location, $webcallService) {

选择一个,建议使用没有$的控制器,所以请使用webcallService声明控制器。

代码语言:javascript
复制
app.register.controller('UserController', function ($scope, $location, webcallService) {

编辑:发现了另一个问题,在阅读了angularAMD文档之后,似乎还必须在define()中添加包含webcallService angularjs服务的requirejs模块WebCallManager

因此,应该是这样:

代码语言:javascript
复制
define(['app', 'WebCallManager'], function (app) {
  app.register.controller('UserController', function ($scope,$location,webcallService) {

否则,模块WebCallManager将不会按需加载.

编辑:发现了第三个问题,您通过app.register注册控制器,但是直接通过app.注册服务。您需要在这里保持一致,但是app.register已经被废弃了(参见这条线)。

因此,最好的方法是像这样删除app.register

代码语言:javascript
复制
app.controller('UserController', ..

在app.js中,从以下几个方面改变:

代码语言:javascript
复制
angularAMD.bootstrap(app);
return app;

代码语言:javascript
复制
return angularAMD.bootstrap(app);

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25239819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档