Как мне $ смотреть несколько интерполированных атрибутов в директиве?

Я неЯ не понимаю, как просматривать несколько атрибутов одновременно в функции ссылки, поэтому я создаю объект со всеми параметрами и наблюдаю за ним. Но я заметил, что атрибут в функции ссылки является строкой, а не объектом, поэтому ям, используя angular.fromJson (val).

Все примеры, которые я нашел, используют только один параметр

Не могли бы вы объяснить, как смотреть несколько атрибутов?

Спасибо

РЕДАКТИРОВАТЬ: Я не могу использовать параметр attrs, потому что мне нужно связать атрибуты, т. Е. Они требуют интерполяции. Например


    
       
    

Я думаю, что я должен использовать $ watchI '

link:function (scope, element, attrs ) {
    scope.$watch('info', function (val) {
    // if info is and foo is .... do all the stuff
    })
}

Ответы на вопрос(1)

Решение Вопроса

что полностью понимаю ваш вопрос, поэтому, пожалуйста, поправьте меня, если я неправильно понял. Просто хотите получить значения из нескольких атрибутов в вашей директиве? Допустим, у вас есть HTML-код, подобный следующему:

<my-directive attr1="data1" attr2="data2" attr3="data3">
</my-directive>

И вы хотите получить значения этих разных атрибутов? В функции ссылки вы просто используете параметр attrs. Например:

link: function(scope, element, attrs) {
    var foo1 = attrs.attr1;
    var foo2 = attrs.attr2;
    var foo3 = attrs.attr3;
}

Вы также можете использовать свойство scope в директиве для автоматической привязки атрибутов к вашей области. Увидетьих документация по директивам. Итак, как-то так:

scope: {
    attr1: '@',
    attr2: '@',
    attr3: '@'
}

И тогда эти свойства автоматически попадают в вашу область. Тем не мение,как я узналэти значения нет всегда в сфере, когда тыбуду ожидать. Таким образом, вы можете использовать$watch Функция делать то, что вам нужно с ними. Что-то вроде:

link: function(scope, element, attrs) {
    scope.$watch("attr1", function () {
         if (scope.attr1)
         {
              //stuff with attr1
         }
    }
    scope.$watch("attr2", function () {
         if (scope.attr2)
         {
              //stuff with attr2
         }
    }
    //....
}

Если вам нужно использовать их все вместе, вы можете использовать функцию для первого параметра$watch это возвращает строку, которая будет отличаться, как только они все там, и затем помещает вашу логику в функцию, которая является вторым параметром. Так что-то вроде этого:

link: function(scope, element, attrs) {
    scope.$watch(function () {
        if (scope.attr1 && scope.attr2 && scope.attr3)
        {
            return "allSet";
        }
        else
        {
            return "";
        }
    }, function (newVal) {
        if ("allSet" == newVal)
        {
            //do stuff with all the properties
        }
    });
}

Если ты'Если вы хотите привязать объекты к вашей области видимости, вы можете использовать '=' вместо '@', Другой вариант - «&» который оценивает функцию в родительской области видимости. Все это объяснено в директивной документации, указанной выше.

 heckmac19 окт. 2012 г., 19:27
Да, это то, что я искал, но я неНе понимаю, как сделать функцию, чтобы использовать все их одновременно. Не могли бы вы написать пример? Спасибо
 dnc25319 окт. 2012 г., 19:52
Мы добавили еще один пример в мой ответ. В твоей скрипке тыЯ хочу убедиться, что prop1 определен, прежде чем пытаться его использовать. Он мог попасть туда раньшеопределены.
 heckmac19 окт. 2012 г., 17:26
Спасибо dnc253; но мне нужно связать параметры, поэтому я думаю, что должен использовать scope. $ watch; но я нене знаю, как смотреть несколько параметров. Я редактировал вопрос.
 dnc25319 окт. 2012 г., 19:06
Я обновил свой ответ. Дайте мне знать, если яЯ до сих пор не понимаю что-то о вашем вопросе.
 heckmac19 окт. 2012 г., 19:43
Хорошо, я думаю, что понял. Вы имеете в виду что-то подобное?jsfiddle.net/rvd6x/3I»

Ваш ответ на вопрос