2013-10-17 66 views
3

我试图显示一张照片,当有人选择它的输入。现在我可能会过度简单地使用angularjs,但我希望这个代码能够工作。更新图像上的输入src更改angularjs

<div ng-app="app"> 

    ... html stuff ... 

    <div ng-controller="imgCtrl"> 

    <input ng-model="imageSource" type="file"></input> 
    <img ng-src="{|imageSource|}"></img> 

    </div> 

    </div> end of app 

凡我angularjs文件如下

var app = angular.module('app',[]).config(function($interpolateProvider){ 
     $interpolateProvider.startSymbol('{|'); 
     $interpolateProvider.endSymbol('|}'); 
    } 
); 

var imgCtrl = function ($scope,$http){ 
    $scope.wall = _wall; 
}; 

clientDashboard.controller('imgCtrl',imgCtrl); 

不幸的是,什么也没发生,我不能看到我更新的形象。我真的必须为此编写锅炉代码吗?

+0

{| imageSource |}'中的'|'是什么? –

+0

他将标记从{{''}}'更改为'{|''|}' – Ronnie

+0

我使用了一个名为twig的模板系统,它与我的php框架一起提供。我需要改变标记。 –

回答

2

我知道它在Chrome和Firefox中工作,但我的快速调查显示这是一个安全风险,甚至可能最终不允许。在这里看到:http://jsfiddle.net/28ZJw/

HTML:

<div ng-app="app"> 
    <div ng-controller="imgCtrl"> 
    <input ng-model="imageSource" type="file" onchange="angular.element(this).scope().fileNameChaged(this)"></input> 
    <img ng-src="{|imageSource|}"></img> 
    </div> 
</div> 

JS:

var app = angular.module('app',[]).config(function($interpolateProvider){ 
     $interpolateProvider.startSymbol('{|'); 
     $interpolateProvider.endSymbol('|}'); 
    } 
); 

app.controller('imgCtrl', function($scope, $http) 
{ 
    $scope.imageSource = ""; 
    $scope.fileNameChaged = function(element) 
    { 
     var reader = new FileReader(); 
     reader.onload = function(e) 
     { 
      $scope.$apply(function() 
      { 
       $scope.imageSource = e.target.result; 
      }); 
     } 
     reader.readAsDataURL(element.files[0]); 
    } 
}); 

正确的做法是让与ng-change这是怎么回事,但是我无法得到它的工作。我不确定ng-change是否适用于文件输入字段

+0

雅我试着用ng-change来做。从技术上讲,你应该“发明”你自己的指令来处理这个问题。不幸的是,我花了很多时间和精力去处理,因为我一直在研究这个项目,并开始学习Angular。谢谢您的帮助! –

+0

是的,我会把它变成一个确定的指示。我昨天刚开始使用指令制作小部件,所以我还没有足够的信心做出一个指令。我也是新的 – Ronnie

+2

这里有一个指令,可能是有用的http://stackoverflow.com/questions/17063000/ng-model-for-input-type-file – jaime