2016-11-18 7 views
0

これは私のコードの一部です。何らかの理由でvm.printを自分の応答に割り当てることはできません。しかし、私はconsole.log()応答をコンソールに表示されます。助けてください。私はvm.printをapp.model.predict(){}関数の外にある任意の文字列に割り当てることができますが、関数内に割り当てると、ビューには表示されませんが、コンソールにしか表示されません。私のapiリクエストの結果をAngularJSのビューに割り当てることができません

<main class="app container" ng-controller="webcamController as vm"> 
    <div class="row"> 
     <div class="col-md-12" style="text-align: center"> 
      <ng-webcam config="vm.config" 
         on-error="vm.onError(err)" 
         on-load="vm.onLoad()" 
         on-live="vm.onLive()" 
         on-capture-progress="vm.onCaptureProgress(src, progress)" 
         on-capture-complete="vm.onCaptureComplete(src)"></ng-webcam> 
     </div> 
     <div class="col-md-12"> 
      <p id="progress">Progress: {{vm.progress}}%</p> 
     </div> 
     <div class="col-md-12 buttons" ng-if="vm.showButtons"> 
      <button class="btn btn-primary" type="button" ng-disabled="!vm.captureButtonEnable" ng-click="vm.capture()">Capture</button> 
      <button class="btn btn-primary" type="button" ng-click="vm.off()">Camera off</button> 
      <button class="btn btn-primary" type="button" ng-click="vm.on()">Camera On</button> 
     </div> 
    </div> 
    <div id="result" class="row"></div> 
    <!-- Displays analysis --> 
    <!--<div ng-repeat="x in analysis"> 
    <h3>Example heading <span class="label label-default">{{x.name}}</span></h3> 
    </div>--> 
    <div class="text-center">{{vm.print}}</div> 

</main> 


<script> 
    vm.test(src); 

    vm.test = function(src) { 


    //converts to string 
    var uri = src.toString(); 
    //String manipulation 
    uri = uri.slice(23, uri.length); 

    var app = new Clarifai.App(
     'kS3D7ofjZQYiyr_7uET1IemaxIzmnmK3vbX4Vhwt', 
     'lvhKWZx9bMY1L0OMVmo9bMr9A9_PyCRgmP2FGvEJ' 
    ); 

    //This message will show up 
    vm.print = "Default message"; 

    // predict the contents of an image by passing in a url 
    app.models.predict(Clarifai.GENERAL_MODEL, {base64: uri}).then(
    function(response) { 

    //str returns a string 
    var str = response.request.response; 
    //converting string to json 
    var json = JSON.parse(str); 
    //returns result 
    console.log(json.outputs[0].data.concepts[0].name); 
    //this does not show up in the view 
    vm.print = json.outputs[0].data.concepts[0].name; 
    }, 
     function(err) { 
     console.error(err); 
     vm.print = "Opps, something went wrong :( " + err; 
    } 
    ); 

}; 


</script> 

これは私のコードの一部です。コンソールでは実行されません。私はanglejsとclarifai apiにもっと精通している構文を見るために誰かに尋ねるだけです。ありがとう。

+0

、私は問題があなたのコードは、コントローラのスコープで実行されていないことだと思います。 – sheppe

答えて

0

私はClarifai.Appを実行するときに使用しているライブラリに精通していませんが、角度ライブラリではないと推測していますので、約束事でダイジェストサイクルが自動的に実行されません解決する(.then()コールバック)

あなた自身で行う必要があります。 THR $scopeサービスを注入しようとすると、$scope.$apply()方法を実行し、次のように:このコードスニペットに基づいて

app.controller('webcamController', function ($scope) { 
    /* ... */ 
    app.models.predict(Clarifai.GENERAL_MODEL, {base64: uri}).then(
     function(response) { 
      /* ... */ 
      vm.print = json.outputs[0].data.concepts[0].name; 
      $scope.$apply(); 
     }); 
}) 
+0

ありがとう、それは動作します。 – Ellipse

関連する問題