2015-08-17 1 views
0

Я получил эту ошибку, когда я использую директиву:Директива Non-Назначаемые Expression, когда проект построен с ворчанием (YEOMAN настройки)

Error: [$compile:nonassign] Expression '' used with directive 'profileModifier' is non-assignable! 

Однако ошибка возникает только тогда, когда мой проект построен с ворчанием. Он работает в devmode.

Моя директива:

angular.module('clientApp') 
    .directive('profileModifier', function() { 
    return { 
     templateUrl: 'template/profile-modifier/profile-modifier.html', 
     restrict: 'E', 
     scope: { 
     title: '=', 
     enabled: '=', 
     available: '=', 
     show: '=', 
     values: '=', 
     columnTitleOne: '=', 
     columnTitleTwo: '=', 
     columnPropertyKeyOne: '=', 
     columnPropertyKeyTwo: '=', 
     uploadFn: '=' 
     }, 
     link: function postLink(scope, element, attrs) { 

     scope.toggleOnOff = function(val){ 
      scope.enabled = val; 
      if(!val){ 
      scope.show = false; 
      } 
     }; 

     scope.toggleShow = function(){ 
      scope.show = !scope.show; 
     } 

     } 
    }; 
    }); 

Markup:

<profile-modifier 
    title="'Lutningsprofil'" 
    enabled="selectedProfile.value.slope.enabled" 
    available="selectedProfile.value.slope.available" 
    show="selectedProfile.value.slope.show" 
    values="selectedProfile.value.slope.values" 
    column-title-one="'KM'" 
    column-title-two="'Lutning (‰)'" 
    column-property-key-one="'distance'" 
    column-property-key-two="'slope'" 
    upload-fn="openUploadModalSlope"> 
</profile-modifier> 

Ошибка возникает, когда я использую функцию scope.toggleOnOff. По какой-то причине свойство «enabled» больше не может быть назначено при построении проекта.

selectedProfile определяется в моей Ctrl:

$scope.profiles = InputFactory.getProfiles(); 
InputFactory.selectedProfile = { 
    value: $scope.profiles[0] 
}; 

$scope.selectedProfile = InputFactory.selectedProfile; 

Есть идеи?

+0

И как 'selectedProfile.value.slope.enabled' определен в контроллере? – dfsq

+0

@dfsq Я обновил свой вопрос. – Per

+0

Не знаете, как минимизация влияет на ваше конкретное приложение, но проверяйте зависимости, введенные должным образом в контроллер. – dfsq

ответ

0

Вы не должны использовать = для вещей, которые вы не хотите назначать. Вместо этого используйте & и получите доступ к этому свойству в качестве вызова функции внутри директивы.

Например, для:

columnTitleOne: '&', 

использовать его как это в шаблоне:

<div>{{columnTitleOne()}}</div> 

и как это в JavaScript коде директивы:

doSomethingWithTitles($scope.columnTitleOne()); 

Как правило , вы должны использовать двусторонние привязки для вещей, которые вы хотите назначить. Вот почему я полагаю, что за использованием = представлять его, как напоминание о том, что вы должны использовать его, если вы собираетесь делать это где-то:

columnTitleOne = something; 

Если вы этого не сделаете, не использовать двухсторонние привязки.

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