2016-06-28 3 views
0

Я кодирую версию AngularJS 1.5.7.директива не получает объект в качестве параметра

По какой-то причине директива не принимает переменную cdata, которая является object.

Почему директива не принимает переменную?

Здесь ниже я вставил весь мой код:

home.js

'use strict'; 

var home = angular.module('app.home', [ 
    'global.factory', 
    'home.factory', 
    'ui.scroll', 
    'ui.scroll.jqlite', 
    'd.card' 
]); 

home.controller('HomeController', [ 
    'homeFactory', 
    '$timeout', 
    function (homeFactory, $timeout) { 

    var data = this; 

    data.posterSize = (screen.width - 42)/3; 

    homeFactory.getJSON().then(function (response) { 
     data.feed = response.home; 
    }); 

    data.datasource = { 
     get: function(index, count, success) { 
     $timeout(function() { 
      var start = Math.max(0, index); 
      var end = Math.min(index + count, data.feed.length); 

      var results = []; 
      for (var i = start; i < end; i++) { 
      results.push(data.feed[i]); 
      } 

      success(results); 
     }, 100); 
     } 
    }; 
    } 
]); 

_home.html

<article ng-controller="HomeController as myHome" class="base-gen" ui-scroll-viewport style="height:100%"> 
    <card class="card" ui-scroll="element in myHome.datasource" cdata="{{element}}" psize="{{myHome.posterSize}}"></card> 
</article> 

card.js

'use strict'; 

var dCard = angular.module('d.card', ['global.factory']); 

dCard.directive('card', [ 'globalImages', function (globalImages) { 
    return { 
    restrict: 'E', 
    scope: { 
     cdata: '@', 
     psize: '@' 
    }, 
    controller: function() { 
     console.log(this.cdata); 
    }, 
    controllerAs: 'myCard', 
    bindToController: true, 
    templateUrl: 'app/Modules/card.html' 
    }; 
}]); 

Я также хочу отметить, что я мигрировали из angular 1.4.8 в 1.5.7 и от ui-router 0.2.15 к 0.3.1

+1

могут быть связаны с этим ответом [] (http://stackoverflow.com/a/ 31013435/2435473) –

+0

похоже, что проблема связана с модулем ui-scroll. После получения его с беседкой больше проблем. Спасибо всем! – DevStarlight

ответ

2

Связывание в директиве говорит «=», это означает, что угловое будет сделать обязательным для вы. Нет необходимости в {{ }}.

<article ng-controller="HomeController as myHome" class="base-gen" ui-scroll- viewport style="height:100%"> 
    <card class="card" ui-scroll="element in myHome.datasource" cdata="element" psize="{{myHome.posterSize}}"></card> 
</article> 

С psize Я не уверен, что если вам нужно {{ }} но для CDATA нет необходимости в скобках

+0

Я обновил сообщение. Это была ошибка моего кода при копировании. Дело здесь в том, чтобы получить в моем каталоге данные «Только для чтения». – DevStarlight

+1

Хорошо, что вы могли бы сделать вместо '@', это односторонняя привязка данных .. ':: ='. Делает очиститель разметки, и мне казалось, что выглядит странно иметь разметку с помощью '{{}}' в атрибуте углового, когда вы можете перезаписать это поведение. – Daniel

+0

Oh! Хорошо! Я буду иметь это в виду! большое спасибо! – DevStarlight

Смежные вопросы