Q:

Angular JS scope variable depends on another scope variable and will not update

I have a directive with scope variables that depend on other scope variables. I would expect that if the scope variable on the right side of the equation changed it would update the left, but this doesn't seem to be happening.
In the example below when running selectProduct() it should update the product information including the product title, but it does not work unless I update scope.title directly as in the commented line at the bottom of the function.
controller:function($scope){
        $scope.products = $scope.productGroup.products;

        $scope.selected_product = $scope.productGroup.products[$scope.productGroup.selected_product];
        $scope.title = _.isEmpty($scope.selected_product) ? $scope.productGroup.title : $scope.selected_product.title;
        $scope.excerpt = _.isEmpty($scope.selected_product) ? $scope.productGroup.excerpt : $scope.selected_product.excerpt;
        $scope.description = _.isEmpty($scope.selected_product) ? $scope.productGroup.description : $scope.selected_product.description;

        $scope.selectProduct = function(){
            $scope.selected_product = $scope.productGroup.products[1];
            console.log($scope.selected_product);
            //$scope.title = $scope.selected_product.title;
        }
    },

A:

In your template just bind to {{ selected_product.title }} instead of setting $scope.title = $scope.selected_product.title and binding to {{ title }}.
As a rule of thumb don't misuse the $scope as your model. Not even as your ViewModel. JavaScript's prototypal inheritance and variable reference system makes it so that Angular does not really follow a traditional MVVM pattern where $scope would be your ViewModel.
Without having a working example of your problem I would like to try a shot in the dark and suggest you to refactor your code into something like that.
controller:function($scope){
    $scope.products = $scope.productGroup.products;
    $scope.selected_product = $scope.products[$scope.productGroup.selected_product] || {
        title: $scope.productGroup.title,
        excerpt: $scope.productGroup.excerpt,
        description: $scope.productGroup.description
    };

    $scope.selectProduct = function(){
        $scope.selected_product = $scope.productGroup.products[1];
    }
},

Make sure to read this one for more background info:
What are the nuances of scope prototypal / prototypical inheritance in AngularJS?
Your problem actually doesn't exactly seem to be related to the prototypal inheritance thing but still make sure to read and understand it. As far as I see, in your code, the real problem is that your are setting $scope.title once and then expect it to change according to changes to $scope.selected_product automatically but why should it? There is no magical connection between those two. However, if you refactor your code to the one I provided, you will not only get the bindings to work but also you will benefit from having less duplicate _.isEmpty() checks (which I doubt you need in the first place actually ;-))

