2017-01-11 69 views
0

我最近在uib-popover上工作,我發現一個我感到困惑的問題。角度烏鴉popover模板輸入雙向綁定

我想彈出一個模板,在這個模板中我有一個輸入,起初輸入有初始值。

我想根據輸入實時更新內容。當我只綁定一個變量時,它不起作用,而如果我綁定了一個對象,它就會起作用。我無法解決這個問題。

的index.html

<!doctype html> 
<html ng-app="ui.bootstrap.demo"> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script> 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-animate.js"></script> 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular-sanitize.js"></script> 
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.4.0.js"></script> 
    <script src="example.js"></script> 
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"> 
    </head> 
    <body> 

<div ng-controller="PopoverDemoCtrl"> 
    <hr/> 
    <hr/> 
    <hr/> 
    <button uib-popover-template="'myPopoverTemplate.html'" popover-placement="bottom-left" type="button" class="btn btn-default">Popover With Template</button> 
    &nbsp; 
    {{dynamicPopover.title}} 
    <script type="text/ng-template" id="myPopoverTemplate.html"> 
     <div class="form-group"> 
      <input type="text" ng-model="dynamicPopover.title" class="form-control"> 
     </div> 
    </script> 

    <button uib-popover-template="'inputContent.html'" popover-placement="bottom-left" type="button" class="btn btn-default">Popover With Template</button> 
    &nbsp; 
    {{inputContent}} 
    <script type="text/ng-template" id="inputContent.html"> 
     <div class="form-group"> 
      <input type="text" ng-model="inputContent" class="form-control"> 
     </div> 
    </script> 
</div> 
    </body> 
</html> 

example.js

angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']); 
angular.module('ui.bootstrap.demo').controller('PopoverDemoCtrl', function($scope, $sce) { 
    $scope.dynamicPopover = { 
    title: 'Title' 
    }; 
    $scope.inputContent = "hello"; 
}); 

這裏是plunker例如https://plnkr.co/edit/IPXb5tddEPQPPAUrjdYx?p=preview,你可以試試。

+0

我認爲這是因爲變量被綁定的值和對象被綁定在JavaScript中的引用。綁定到對象有什麼問題? –

+0

你[不能有與基元的雙向綁定](http://stackoverflow.com/questions/38078884/two-way-binding-on-primitive-variables-in-angularjs-directive) – RamblinRose

+0

@big_water我只是想弄清楚爲什麼它不能綁定到一個變量。 –

回答

0

你在第二段中提出了一個有趣的觀點。我沒有第一次瞭解這一點,但我認爲這可能是因爲你正在腳本標記中進行彈出輸入。如果可以的話,我會建議使用自定義指令,而不是在內聯腳本中進行。這樣它就可以和角度的摘要循環保持同步。

實施例指令:

customPopoverApp.directive('customPopover',['$compile','$templateCache',function($compile,$templateCache){ 
    return { 
    restrict:'A', 
    transclude:true, 
    template:"<span>Click on me to show the popover</span>", 
    link:function(scope,element,attr){ 
     var contentHtml = $templateCache.get("customPopover.html"); 
     contentHtml=$compile(contentHtml)(scope); 
     $(element).popover({ 
     trigger:'click', 
     html:true, 
     content:contentHtml, 
     placement:attr.popoverPlace 
     }); 
    } 
    }; 
}]); 

而且使用它:

<button custom-popover="" popover-place="bottom">click on me to show the popover</button> 
{{message}} 

<script type="text/ng-template" id="customPopover.html"> 
    <div class="form-group"> 
    <input type="text" ng-model="message" class="form-control"> 
    </div> 
</script> 

這裏是一個working plunk。我希望這是你正在尋找的