2013-10-13 5 views
1

Привет У меня есть следующий фрагмент кода. Моя цель - разрешить создание нескольких div и их положение, текст, высоту и ширину привязаны к модели контроллера.angularjs не может назначить переменную области видимости внутри функции связи

appModule.controller('textController', function($scope){ 
    var box = {x: '0', y: '0', height: '100px', width: '200px', text: 'this is the default text'}; 

    $scope.textBoxes = [box]; 

    $scope.addNewTextBox = function(){ 
     console.log("creating new textbox!!!"); 
     $scope.textBoxes.push(box); 
    }; 
}); 

appModule.directive('tbox', function($document){ 
    return { 
     restrict: "E", 
     template: '<div><div ng-transclude></div>', 
     transclude: true, 
     scope: { 
      model: "=", 
     }, 
     link: function postLink(scope, element, attrs, ctrl){ //the scope here is the object's scope 
      var length = scope.$parent.textBoxes.length; 
      console.log(length); 
      scope.model = scope.$parent.textBoxes[length-1]; 
     } 
    } 

}); 

У меня возникли проблемы. Я не могу присвоить переменную модели области переменной textBoxes в контроллере, заявив, что

Error: Non-assignable model expression: undefined (directive: tbox) 
    at Error (<anonymous>) 
    at h (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js:43:213) 
    at Object.<anonymous> (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js:43:326) 
    at Object.e.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js:87:13) 
    at Object.e.$apply (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js:89:198) 
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js:16:239 
    at Object.d [as invoke] (https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min. 

Любая идея, почему?

+0

У вас есть объект, называемый 'model' на родительской области? Мне интересно, если он наткнулся на привязку в вашем атрибуте 'scope'. – KayakDave

+0

@ KayakDave, нет, мне нужно? Извините, но я все еще не понят о понятиях изолированных областей. Я сделал свою модификацию из этого http://plnkr.co/edit/VFbP9h, хотя – goh

+0

Ну, ваш '=' в рамках 'scope' запрашивает привязку к объекту, называемому' model', поскольку вы ничего не указываете на справа от знака равенства. Вам нужно '=' вообще? – KayakDave

ответ

0

Поскольку ошибка сообщает, что «модель» не определена, попробуйте удалить model: "=" из области изоляции директивы.

Так это будет выглядеть следующим образом:

scope: {}, 
Смежные вопросы