0

I'm using angular-webspeech-directive

Here's the HTML code:

<!DOCTYPE html>
<html ng-app="plunker">

<head>
    <meta charset="utf-8" />
    <title>TestBed</title>
    <link data-require="bootstrap-css@3.0.0" data-semver="3.0.0" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" />
    <link data-require="font-awesome@4.3.0" data-semver="4.3.0" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" />
    <link href="//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.css" rel="stylesheet" />
    <link rel="stylesheet" href="css/style.css" />

</head>

<body ng-controller="MainCtrl" ng-cloak="">

<div class="container">

    <div class="row">
        <div class="col-md-12">

            asdfasdf
            <js-speech ng-model="speech"></js-speech>

            <!--
            <pre>js-speech ng-model="speech"</pre>
            <br />-->

            <strong>Debugger</strong>
            <pre>$scope.speech:{{speech|json}}</pre>
        </div>
    </div>
</div>

<!-- Application Scripts -->
<script data-require="jquery@2.0.3" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
<script data-require="angular.js@1.0.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js" data-semver="1.0.8"></script>
<script data-require="modernizr@2.6.2" data-semver="2.6.2" src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.js"></script>



<script src="js/Speech.js"></script>
<script src="js/speechapp.js"></script>

</body>

</html>

Here's angular speechapp.js

(function() {
    var app;

    app = angular.module("plunker", ["jonniespratley.angularWebSpeechDirective"]);

    app.controller("MainCtrl", function($scope) {


        return $scope.speech = {
            maxResults: 25,
            continuous: true,
            interimResults: true
        };

        $scope.$on('onresult', function() {console.log( "---->speech.interimResults<----" );});

        $scope.test=function(){
            console.log( "---->speech.interimResults<----" );
        }
        $scope.$digest();
        $scope.$watch('$scope.speech.interimResults', function() {console.log( "---->speech.interimResults<----" ); }, true);

        $scope.$watch('speech.interimResults', function(newVal, oldVal) {
          //do something here like get the text input value and send to api
          //after speaking even the value of speech.intermResults change this does not get triggered.  
          return console.log(newVal);
        }, true);
    });

}).call(this);

what I wanted to happen is whenever the user completed speaking into the Mic, i can get the input txt so I can post process the text content. I need to get the content of the text input and be able to send it to an API, however I can't find a hook to the directive's onresult event.

Is it a good way to watch the scope.speech, I tried $scope.$watch to see if $scope.speech is changed but its not working. Thanks in advance for any help.

Ehsan Khodarahmi
  • 4,772
  • 10
  • 60
  • 87
bherto39
  • 1,516
  • 3
  • 14
  • 29
  • This will help you. http://stackoverflow.com/questions/32347881/check-array-value-exist-or-not-using-watch-function-in-angular-js/32347956#32347956 – Bhojendra Rauniyar Dec 03 '15 at 05:33

1 Answers1

9

Do not use $scope for referencing scope variables in $watch. So instead of

$scope.$watch('$scope.speech.interimResults', function () {
    console.log("---->speech.interimResults<----");
}, true);

you should write

$scope.$watch('speech.interimResults', function () {
    console.log($scope.speech.interimResults);
}, true);
Vivek
  • 11,938
  • 19
  • 92
  • 127