2016-04-04 2 views
0

я директива определена так:Обновление родительского объекта из изолированного объема в директиве не работает на всех

myApp.directive('someDirective', function() { 
return { 
    restrict: 'A', 
    scope: { 

     disableButton: '=', 
    }, 
    templateUrl: 'sometemplate.html', 
    controller: 'SomeDirectiveController' 
} 

});

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

mLoan.controller('GiversDirectiveController', function (
$scope, 
) { 

$scope.checkGiversAmount = function() { 
    var giversCurrentTotalValue = $scope.stocksTotalAmount - $scope.giversCurrentAmount; 

} 

это мнение директива

<div class="row"> 
    <div class="col-lg-2"> 
     <label for="customer">Wybierz klienta</label> 
     <select id="customer" 
       name="customer" 
       class="form-control" 
       ng-model="selectedCustomerId" 
       ng-options="customer.Id as customer.Name for customer in customers" 
       ng-change="getGiversFunds(selectedCustomerId)" 
       required=""></select> 
    </div> 
    <div class="col-lg-2" ng-show="customerFunds.length > 0"> 
     <label for="customerFunds">Wybierz fundusz</label> 
     <select id="customerFunds" 
       name="customerFunds" 
       class="form-control" 
       ng-model="selectedFundId" 
       ng-options="customerFund.Id as customerFund.Name for customerFund in customerFunds" 
       ng-blur="updateGiverFund(selectedCustomerId, selectedFundId)" 
       ng-required="customerFunds.length > 0"></select> 
    </div> 
    <div class="col-lg-2"> 
     <label for="giversCurrentAmount">Ilość</label> 
     <input type="number" min="1" 
       max="{{giversCurrentAmount}}" 
       id="giversCurrentAmount" 
       name="giversCurrentAmount" 
       class="form-control" 
       ng-model="giversCurrentAmount" 
       ng-change="checkGiversAmount(selectedFundId)" 
       ng-blur="updateGiverStockAmount(selectedCustomerId, giversCurrentAmount)" 
       required /> 
    </div> 
    <div class="col-lg-2"> 
     <label for="commission">FEE%</label> 
     <input type="number" 
       min="1" 
       id="commission" 
       name="commission" 
       class="form-control" 
       ng-model="commission" 
       ng-blur="updateGiverCommission(selectedCustomerId, commission)" 
       required /> 
    </div> 
    <div class="col-lg-4"> 
     <label for="minimalCommission">FEE Min</label> 
     <input type="number" 
       min="1" 
       id="minimalCommission" 
       name="minimalCommission" 
       class="form-control" 
       ng-model="minimalCommission" 
       ng-blur="updateGiverMinimalCommission(selectedCustomerId, minimalCommission)" 
       required /> 
    </div> 
</div> 

И родительский вид, в котором я использую директиву с помощью кнопки:

<div ng-repeat="giver in givers"> 
        <div givers-directive givers="givers" 
         givers-current-amount="giversCurrentAmount" 
         disable-giver-side-add="parent" 
         stocks-total-amount="stocksTotalAmount"> 
        </div> 
       </div> 
       <div class="row"> 
        <div class="col-lg-12 margin-top-10px"> 
         <button id="addGiverSide" 
           name="saveLoan" 
           class="btn btn-primary" 
           ng-click="addGiverSide(AddLoansForm)" 
           ng-disabled="disableButton"> 
          Dodaj 
         </button> 
        </div> 
       </div> 

Теперь моя проблема и вопрос в то же время, как я могу обновить disableButton fr о родительской модели. Прежде чем вы скажете, что это дубликат, я столкнулся с решениями, которые были на stackoverflow в основном: How to access parent scope from within a custom directive *with own scope* in AngularJS? и тот один: What are the nuances of scope prototypal/prototypical inheritance in AngularJS?, но ничего не помогает. Что такое straneg (или нет), я не могу использовать $ parent для этого. Я должен пройти через: $ scope. $ Parent. $ Parent path, а затем он обновляется. Кроме того, он выглядит уродливым и странным, он не работает, когда я пытаюсь обновить эту переменную из родительского представления. Подводя итог, один эффект работает, а другой - нет. И после изменения происходит наоборот. Я попытался завернуть кнопку disable в объект и попытаться сделать изменение, но это тоже не сработает. Или, может быть, я делаю это неправильно. Пожалуйста, любезно помогите мне, потому что у меня заканчиваются идеи. Что я делаю не так?

UPDATE

Я добавляю остальные точки зрения директивы, чтобы показать концепцию, что я пытаюсь достичь здесь. Есть понижения, которые я хочу, чтобы они были независимыми. Поскольку без директивы с разделенной (или изолированной) областью, два выпадающих списка заполняются, изменяя другое. Я хочу изменить их независимо. Мне удалось достичь этой цели. Но теперь я не могу заставить кнопку отключения работать.

ответ

0

Определяя область действия внутри вашей директивы, вы блокируете свою директиву из области действия родителя. Если вы хотите использовать родительскую область, вы должны установить для своей области значение true.

Вы можете прочитать больше по этому вопросу здесь: http://www.sitepoint.com/practical-guide-angularjs-directives/

EDIT: Пример

myApp.directive('someDirective', function() { 
return { 
    restrict: 'A', 
    scope: true, 
    templateUrl: 'sometemplate.html', 
    controller: 'SomeDirectiveController' 
} 
+0

Я пробовал это, но это не помогло также. Я обнаружил, что у меня также есть директива ng-repeat. У этого также есть область видимости, поэтому я, вероятно, должен пройти через $ scope. $ Parent. $ Parent. Первый $ parent - это уровень ng-repeat, а следующий - тот, который я ищу. Я переместил ng repeat в обратный вид, и я увижу, что я придумаю, когда вы это сделаете. –

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