Можете ли вы использовать Angular Binding Expression внутри HTML, полученного из службы?

У меня есть фрагмент html, который поступает из базы данных mongo, полученной службой angular. Затем этот html-фрагмент обрабатывается на моей странице с помощью директивы ng-bind-html от ngSanitize. Мне интересно, как я могу привязать выражение внутри фрагмента html к странице, чтобы при привязке html выражение привязки выполнялось внутри фрагмента. Например, вот мой div, к которому будет привязан мой html-фрагмент:

                <div ng-bind-html="middle_snippet">

                </div>

и вот фактический фрагмент, который извлекается из службы.

    <p>WHY HERRRRO!!! {{myBinding}}</p>

И вот мой простой контроллер:

    var middleMainContent = $Content.content({slug: "home-bottom-middle"
    }, function () {
        console.log(JSON.stringify(middleMainContent));
        $scope.middle_snippet = middleMainContent.response.content.snippet;
        $scope.myBinding = 'VERY NICE BINDING';

    });

Так что на самом деле мои ожидаемые результаты были бы html:

WHY HERRRRO!!! VERY NICE BINDING

Однако я получаю оригинальный html с фигурными скобками. Любые идеи помогут, поскольку я стою здесь, пытаясь заставить это работать.


ОБНОВЛЕНИЕ: Итак, прочитав о службе компиляции и используя их с директивами, как упоминал Чандермани, я одновременно просветлен и сбит с толку. Согласно команде AngularJS, лучший способ при использовании $ compile - использовать его в объекте определения директивы (DDO), как указано здесь http://docs.angularjs.org/api/ng/service/ $ compile. Итак, я создал DDO, однако меня смущает то, что входит в метод compile: для DDO. Вот что у меня есть на данный момент:

var myModule = angular.module('html_compile');

myModule.directive('html_compiler', function factory(injectables) {
var directiveDefinitionObject = {
    priority: 0,
    template: $scope.snippet,
    replace: true,
    transclude: false,
    restrict: 'E',
    scope: false,
    compile: function compile(tElement, tAttrs) {
        return {
            pre: function preLink(scope, iElement, iAttrs, controller) { ... },
            post: function postLink(scope, iElement, iAttrs, controller) { ... }
        }
        // or
        // return function postLink( ... ) { ... }
    },
    // or
    // link: {
    //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },
    //  post: function postLink(scope, iElement, iAttrs, controller) { ... }
    // }
    // or
    // link: function postLink( ... ) { ... }
    };
    return directiveDefinitionObject;
});

person britztopher    schedule 11.03.2014    source источник
comment
Вам необходимо скомпилировать контент, который вы получаете, используя службу $ compile, и вставить его в html.   -  person Chandermani    schedule 11.03.2014
comment
Так что мне тоже нужно создать специальную директиву для этого, верно?   -  person britztopher    schedule 11.03.2014
comment
Посмотрите документацию по $ compile. В конце есть директива компиляции docs.angularjs.org / api / ng / service / $ compile   -  person Chandermani    schedule 12.03.2014
comment
Я начинаю читать о компиляции, однако есть ли способ, которым ui-router может сделать это из коробки с вложенным представлением?   -  person britztopher    schedule 12.03.2014
comment
Любой контент, который вы включаете с помощью тега ui-view html, автоматически компилируется в пользовательском интерфейсе.   -  person Chandermani    schedule 12.03.2014


Ответы (1)


Итак, @Chandermani ударил его по голове службой $compile, и, конечно же, это был пример в конце той страницы, на которую есть ссылка в комментариях, однако это немного сбивало с толку, поскольку внутри директивы есть элемент "компиляция" Объект определения, как указано на той же странице. Итак, я предполагаю, что этот элемент компиляции определяет, как и когда вы хотите скомпилировать директиву, которую вы создаете в DDO, и пример внизу относится к $compileProvider и создает директиву на его основе. Блог с полностью объясненным ответом находится здесь: Ваша собственная служебная директива $ compile

person britztopher    schedule 14.03.2014