javascript 격자 라이브러리 slickgrid에 대한 지시문이 있습니다.분리 된 범위를 정의 할 때 지시어 동작이 변경됨
http://plnkr.co/edit/KWZ9i767ycz49hZZGswB?p=preview
는 내가 뭘 원하는 다시 컨트롤러까지 선택한 행을 통과합니다. 그래서 격리 된 범위 ('='사용)를 사용하여 컨트롤러와 지시문 사이에서 양방향 바인딩을 작동 시키려고합니다. 내가 범위 선언의 어떤 종류없이 지시어를 정의하면
모든 작동합니다.
<slickgrid id="myGrid" data="names" selected-item="selectedItem"></slickgrid>
app.directive('slickgrid', function() {
return {
restrict: 'E',
replace: true,
//scope: {
// selectedItem: '='
//},
template: '<div></div>',
link: function($scope, element, attrs) {
...
var redraw = function(newScopeData) {
grid.setData(newScopeData);
grid.render();
};
$scope.$watch(attrs.data, redraw, true);
내가 (선 app.js에서 19 ~ 21) 위의 라인의 주석을 해제한다면 그것은 $ 범위처럼 보이는 $를 attrs.data 객체를보고있는 watch는 redraw를 호출하지만 attrs.data는 undefined로 전달됩니다.
내 분석이 잘못 될 수는 있지만 왜 범위를 정의하면이 문제가 발생하는지 잘 모르겠습니다. 누군가가 그 이유를 설명 할 수 있습니까?
.nathan.
감사합니다.이 기능을 사용할 수있었습니다. 그러나 데이터 범위를 틱으로 캡슐화해야하는 이유는 아직 명확하지 않습니다. 이제 지시문에서 새 행을 선택할 때 {{selectedItem}}이 (가) 업데이트되지 않는 이유를 알아야합니다! – nathasm
@nathasm, [$ watch] (http://docs.angularjs.org/api/ng.$rootScope.Scope#$watch)의 첫 번째 인수가 문자열 인 경우 범위와 비교하여 평가됩니다 'ng-click = 'someProperty = 22 '' 또는'ng-model ='someProperty'' 또는'ng-show = "showIt"' '{{selectedItem}}'을 업데이트하려면 :'$ scope.selectedItem = item; $ 범위. $ 적용()'. [Plunker] (http://plnkr.co/edit/SJUJkgb4GgDwNlnJElBk?p=preview). –