【问题标题】:Correct way to access emojione in angular controller在角度控制器中访问 emojione 的正确方法
【发布时间】:2016-05-25 21:12:43
【问题描述】:

我有一个带有 AngularJs 1.5.5、OnsenUI 2 和 EmojiOne 的 PhoneGap 应用程序。

我正在尝试访问角度控制器内部的 emojione 变量:

ons.bootstrap.controller('AppController', ['$scope', '$timeout','$http', '$sce', function ($scope, $timeout, $http, $sce) {

    emojione.imageType = 'svg';
    emojione.sprites = true;
    emojione.imagePathSVGSprites = '../res/sprites/emojione.sprites.svg';
    ...

我稍后也会调用一些函数。

当我在我的 PC 上运行它时,它按预期工作,但无法在 android 上解析“emojione”(它未定义)。 这是我第一次使用 angularjs 和 JavaScript,所以它可能非常简单。

【问题讨论】:

    标签: javascript angularjs cordova emojione


    【解决方案1】:

    您是从 cdn 加载 emojione 库吗? 手机可以上网吗?

    【讨论】:

    • 是的,它是来自 cdn 的唯一库,我的应用程序已经连接到欧洲某处的服务器,因此它应该可以访问互联网。
    • 删除cdn引用后,库现在加载了,我猜cdn引用不是用phonegap的好主意。谢谢
    【解决方案2】:

    在处理 angularjs 和标准 javascript 库时,我喜欢创建一个模块和工厂来简单地访问根变量,就像您尝试做的那样:

    angular.module('emojioneModule', [])
    .factory('emojione', function($window) {
        return $window.emojione;
    });
    

    这允许您注入引用,并允许您模拟 emojione 以进行单元测试,因为您可以注入模拟代替。

    ons.bootstrap.controller('AppController', ['$scope', '$timeout','$http', '$sce', 'emojione', function ($scope, $timeout, $http, $sce, emojione) {
    
        emojione.imageType = 'svg';
        emojione.sprites = true;
        emojione.imagePathSVGSprites = '../res/sprites/emojione.sprites.svg';
        ...
    

    但是,您可以只注入 $window,然后直接从那里访问它。

    【讨论】:

    • 当我像注入其他的一样注入 $window 时,我收到错误“TypeError: Cannot set property 'imageType' of undefined”
    • 您确定在您的控制器实例化之前加载了 emojione 脚本吗?
    • 我不是,但是在下载库并直接添加后,它不再使我的应用程序崩溃。我猜 cdn 引用不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多