在 angular 控制器中使用 textangular 函数?

Using textangular functions in angular controller?

我是 angular 的新手,正在尝试更改 textangular 的默认行为我网站后端的文本输入字段(我是吉他手,不是网络开发人员,但通常可以弄清楚我需要做什么...)。该字段有一个选项可以指定 youtube url,然后 textangular 将其转换为图像以便在后端进行编辑。然后在前端 textangular 有办法让 youtube url 正确显示为 iframe。

但是,在前端我没有使用 angular 我在我的例子中读到,要嵌入一个 youtube 以显示在前端iframe 你必须使用 taApplyCustomRenderers 函数。

例如,请看这里:

how to strip placeholder img in textAngular editor in scope var?

在我的 angular 应用程序中,以下是一些相关行:

angular.module('dashboard')
.controller('EditController', ['$scope', '$http', '$location', '$routeParams', function ($scope, $http, $location, $routeParams) {

$scope.save = function () {
    $scope.busy = true;
    // I thoguht I could do this:
    $scope.somefield = taApplyCustomRenderers($scope.somefield);
    // then I would save to model
    });

我收到 taApplyCustomRenderers 未定义的错误。根据我的阅读,我认为 taApplyCustomRenderers 在使用 textangular 时是一个可用的函数,但我想我是新手缺少将函数注入控制器或其他东西的一些关键步骤。

希望有人能给出一些启示。

提前致谢! 布莱恩

TLDR; When you try to access taApplyCustomRenderers you are recieving an error since it is not given to this current function, Inject the function and it will work.

问题

虽然我从未真正尝试过使用 textAngular,但让我解释一下问题所在,从那里应该很容易找到解决方案。

您的 EditController 只是一个常规 javascript 函数,它获取 运行 并附加到相关的 DOM 元素,因此它只能访问已声明的函数在它自己的范围内(或全球)。

Here is your exact code just indented differently so you can understand better:

angular.module('dashboard').controller(
    'EditController',
    [
        '$scope',
        '$http',
        '$location',
        '$routeParams', 
        function ($scope, $http, $location, $routeParams) {
            ...
            $scope.somefield = taApplyCustomRenderers($scope.somefield);
        }
    ]
);

如您所见,controller function 有两个参数,第一个是 string,第二个是 array,最后一个 elementarray 只是一个普通的 function.

解决方案

检查 textAngular documentation 我看到 taApplyCustomRenderers 是一个工厂,这意味着你可以将它注入到你的控制器函数中:

angular.module('dashboard').controller('EditController', 
    ['$scope', '$http', '$location', '$routeParams', 'taApplyCustomRenderers',
     function ($scope, $http, $location, $routeParams, taApplyCustomRenderers) { 
         taApplyCustomRenderers(); // is now Available.
     }
    ]);